我有一个包含10列的数据表.
town
tc
one
two
three
four
five
six
seven
total
Run Code Online (Sandbox Code Playgroud)
需要为我使用的"一"到"总"列生成平均值,
DTmean <- DT[,(lapply(.SD,mean)),by = .(town,tc),.SDcols=3:10]
Run Code Online (Sandbox Code Playgroud)
这会生成均值,但我希望列名称后缀为"_mean".我们应该怎么做?希望前两列保持与"town"和"tc"相同.我尝试了以下但是然后它将所有"one"重命名为"total"到"_mean"
for (i in 3:10) {
setnames(DTmean,i,paste0(names(i),"_mean"))
}
Run Code Online (Sandbox Code Playgroud) 我有两个数据集一和二
数据集一
a b c
111 a 1
112 b 2
113 c 3
114 d 4
115 e 5
Run Code Online (Sandbox Code Playgroud)
数据集二
e d g
222 ss 11
111 ff 22
113 ww 33
114 qq 44
234 dd 55
534 vv 66
Run Code Online (Sandbox Code Playgroud)
我想做一个左连接
下面是用SQL编写的代码,但是当我在SQLDF中尝试它时,它显示为错误
proc sql;
create table join1 as
select one.*, two.*
from one left join two
on one.a = two.e;
quit;
Run Code Online (Sandbox Code Playgroud) 我有2个数据集:
数据1:
Var1 Var2 Var3 Var4
10 10 2 3
9 2 8 3
6 4 4 8
7 3 10 8
Run Code Online (Sandbox Code Playgroud)
数据2:
Var1 Var5 Var3 Var6
3 6 6 4
1 2 5 1
9 2 2 9
2 6 3 2
Run Code Online (Sandbox Code Playgroud)
现在我想附加这2个数据集
最终数据:
Var1 Var2 Var3 Var4 Var5 Var6
10 10 2 3
9 2 8 3
6 4 4 8
7 3 10 8
3 4 6 6
1 1 2 5
9 9 2 2
2 …Run Code Online (Sandbox Code Playgroud) 您有两个数据框:
df <- data.frame(A = c(1,1,2,2,3,3), B = c('cat','dog','cat','dog','cat','dog'), C = c(100,200,300,400,500,600))
df2 <- data.frame(A = c(1,1,1,1,2,2,2,2,3,3,3,3), B = c('cat','dog','cat','dog','cat','dog'))
Run Code Online (Sandbox Code Playgroud)
输出df1:
A B C
1 cat 100
1 dog 200
2 cat 300
2 dog 400
3 cat 500
3 dog 600
Run Code Online (Sandbox Code Playgroud)
输出df2:
A B
1 cat
1 dog
1 cat
1 dog
2 cat
2 dog
2 cat
2 dog
3 cat
3 dog
3 cat
3 dog
Run Code Online (Sandbox Code Playgroud)
我知道如何匹配单个值,以便当'A'值在df和df2上匹配时,它将把该值添加到df2:
df2$match <- df$C[match(df2$A, df$A)]
Run Code Online (Sandbox Code Playgroud)
输出:
A B match
1 cat …Run Code Online (Sandbox Code Playgroud) 我知道,我知道....另一个合并的 Df 问题,请听我说,因为我已经搜索了关于这个问题的答案,但没有出现。
我正在合并两个 Df,一个比另一个小,并进行左合并,以将较长的 DF 与较小的 DF 相匹配。
这很有效,除了一个问题,当右侧(较长)df 有重复项时,行会添加到左侧(较小)df 中。
一个例子:
Row<-c("a","b","c","d","e")
Data<-(1:5)
df1<-data.frame(Row,Data)
Row2<-c("a","b","b","c","d","e","f","g","h")
Data2<-(1:9)
df2<-data.frame(Row2,Data2)
names(df2)<-c("Row","Data2")
DATA<-merge(x = df1, y = df2, by = "Row", all.x = TRUE)
>DATA
Row Data Data2
1 a 1 1
2 b 2 2
3 b 2 3
4 c 3 4
5 d 4 5
6 e 5 6
Run Code Online (Sandbox Code Playgroud)
看到额外的“b”行?,这就是我想要摆脱的,我想保留左边的 DF,但非常严格,就像 DF1 中有 5 行,合并时我希望只有 5行。
像这样...
Row Data Data2
1 a 1 1
2 b 2 2
3 …Run Code Online (Sandbox Code Playgroud) 输入数据帧
DF 1(示例 - nrow = 10)
Col A | Col B | Col C
a 1 2
a 3 4
b 5 6
c 9 10
Run Code Online (Sandbox Code Playgroud)
DF 2(示例 - nrow = 20)
Col A | Col B | Col E
a 1 22
a 31 41
a 3 63
b 5 6
b 11 13
c 9 20
Run Code Online (Sandbox Code Playgroud)
我想创建第三个数据集,其中包含在数据帧 2 中为 Col A 和 Col B 条目找到的每个附加行。
输出文件(nrow = 20-10 = 10)
Col A | Col B | …Run Code Online (Sandbox Code Playgroud) 我正在尝试在mutate(). df1假设我们从一个如下所示的数据框开始,由下面的代码生成:
ID Status
1 1 N
2 2 Y
3 3 Y
4 4 N
5 5 Y
df1 <- data.frame(
ID = c(1,2,3,4,5),
Status = c("N","Y","Y","N","Y")
)
Run Code Online (Sandbox Code Playgroud)
我使用 dplyr 的mutate()函数根据最右侧“状态”列的值生成一个新列。下面是新的tmp数据帧输出和生成它的 dplyr 代码(这是一个超级简单的示例,适用于我的更大问题 - 就这样吧):
ID Status Flag
1 1 N No
2 2 Y Yes
3 3 Y Yes
4 4 N No
5 5 Y Yes
tmp <-
df1 %>%
mutate("Flag"=case_when(Status=="Y"~"Yes",TRUE~"No"))
Run Code Online (Sandbox Code Playgroud)
我试图在上面嵌入“匹配”函数的等效项mutate(),以便插入到 Flag 列中的值取决于df1数据帧中的 ID 与这两个附加数据帧中的 …
我有两个data.table dx和dy
dx <- data.table(a = c(1,1,1,1,2,2), b = 3:8)
dy <- data.table(a = c(1,1,2), c = 7:9)
Run Code Online (Sandbox Code Playgroud)
我想加入dy到每一行dx,下面是所需的输出
data.table(plyr::ddply(dx, c("a", "b"), function(d) merge(d, dy, by = "a")))
a b c
1: 1 3 7
2: 1 3 8
3: 1 4 7
4: 1 4 8
5: 1 5 7
6: 1 5 8
7: 1 6 7
8: 1 6 8
9: 2 7 9
10: 2 8 9
Run Code Online (Sandbox Code Playgroud)
但是,我没有使用内部[]的操作 …
这是一个非常简单的问题,但在这里找不到合适的答案。
一个如何将两个data.frame dplyr基于两个在每个data.frame中具有不同名称的列连接在一起?
有了base::merge一个可以简单merge:
df3 <- merge(df1, df2, by.x=c("name1", "name2"), by.y=c("name3", "name4"))
Run Code Online (Sandbox Code Playgroud)
在哪里df1$name1 == df2$name3和df1$name2 == df2$name4。
如何做到这一点dplyr?
我知道一个人可以使用该by函数dplyr来连接两个基于一个具有不同名称的列的data.frame:
df3 <- dplyr::left_join(df1, df2, by=c("name1" = "name3"))
Run Code Online (Sandbox Code Playgroud) 我有多个包含多个列的数据集。我想提取所有数据集共有的列。例如。如果所有数据集都有一个名为“id”或“Age”的列,我想提取它们。我如何知道哪些列是所有数据集共有的。
最初我想到使用 head 函数,然后检查这些值以检查相似性。但如果有多个数据集,这可能会变得非常乏味。
我想在 R 中水平组合两个数据框。
这是我的两个数据框:
数据框1:
veg loc quantity
carrot sak three
pepper lon two
tomato apw five
Run Code Online (Sandbox Code Playgroud)
数据框2:
seller quantity veg
Ben eleven eggplant
Nour six potato
Loni four zucchini
Ahmed two broccoli
Run Code Online (Sandbox Code Playgroud)
我希望结果是一个如下所示的数据框:
veg quantity
carrot three
pepper two
tomato five
eggplant eleven
potato six
zucchini four
broccoli two
Run Code Online (Sandbox Code Playgroud)