R 添加新列,其中两列中重复的列数
您好,我有一个数据帧,例如:R 添加新列,其中两列中重复的列数,r,dataframe,R,Dataframe,您好,我有一个数据帧,例如: COL1 COL2 SP1 A SP1 A SP1 B SP2 A SP2 C SP2 D SP3 E SP4 B SP4 B SP4 B 我想把它改为: COL1 Value COL2 SP1 2 A SP1 1 B SP2 1 A SP2 1 C SP2 1 D SP3 1 E SP4 3 B 其中,列值是重复的c'COL1','COL2'的数量 有人对R有想法吗
COL1 COL2
SP1 A
SP1 A
SP1 B
SP2 A
SP2 C
SP2 D
SP3 E
SP4 B
SP4 B
SP4 B
我想把它改为:
COL1 Value COL2
SP1 2 A
SP1 1 B
SP2 1 A
SP2 1 C
SP2 1 D
SP3 1 E
SP4 3 B
其中,列值是重复的c'COL1','COL2'的数量
有人对R有想法吗
以下是示例数据:
structure(list(COL1 = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
4L, 4L, 4L), .Label = c("SP1", "SP2", "SP3", "SP4"), class = "factor"),
COL2 = structure(c(1L, 1L, 2L, 1L, 3L, 4L, 5L, 2L, 2L, 2L
), .Label = c("A", "B", "C", "D", "E"), class = "factor")), class = "data.frame", row.names = c(NA,
-10L))
这可能与交互+表有关:
res 2 SP2 A 1
R> 3 SP1B1
R> 4 SP4 B 3
R> 5 SP2 C 1
R> 6 SP2 D 1
R> 7 SP3 E 1
如果~~在某些因素中,您可以更改sep。通过在交互中添加另一个参数,这扩展到更多的因子变量
您也可以这样使用表:
res COl1 COL2值
R> 1 SP1 A 2
R> 2 SP2 A 1
R> 3 SP1 A 1
R> 4 SP4 B 3
R> 5 SP2 B 1
R> 6 SP2 C 1
R> 7 SP3 D 1
当存在多个因素水平时,前者可能更有效。如果要按显示顺序获取数据,可以使用排序。这可能与interaction+table有关:
res 2 SP2 A 1
R> 3 SP1B1
R> 4 SP4 B 3
R> 5 SP2 C 1
R> 6 SP2 D 1
R> 7 SP3 E 1
如果~~在某些因素中,您可以更改sep。通过在交互中添加另一个参数,这扩展到更多的因子变量
您也可以这样使用表:
res COl1 COL2值
R> 1 SP1 A 2
R> 2 SP2 A 1
R> 3 SP1 A 1
R> 4 SP4 B 3
R> 5 SP2 B 1
R> 6 SP2 C 1
R> 7 SP3 D 1
当存在多个因素水平时,前者可能更有效。如果要按显示顺序获取数据,可以使用“排序”。使用和来自:
图书馆弹琴
图书馆三年
你的数据
数据%
汇总值=n
后果
使用和来自:
图书馆弹琴
图书馆三年
你的数据
数据%
汇总值=n
后果
首先使用unique删除任何重复的项。然后使用lappy迭代唯一数据,以计算与原始数据匹配的行数。存储在df1中的示例数据
首先使用unique删除任何重复的项。然后使用lappy迭代唯一数据,以计算与原始数据匹配的行数。存储在df1中的示例数据
使用librarydata.table
使用librarydata.table
使用聚合的基本R选项
使用聚合的基本R选项
是一列还是两列?上一个数据示例中只有一列。对不起,我编辑了DPUTI是一列还是两列?上一个数据示例中只有一列。抱歉,我编辑了DPUT。请注意,这会打印结果,但不会修改data.frame,因为dt仍然返回原始数据。不确定您的观点是@ManotheSharek。如果您想存储答案,只需使用赋值,请注意这会打印结果,但不会修改data.frame,因为dt仍然返回原始数据。不确定您的观点是@manotheshark。如果要存储答案,只需使用赋值
df2 <- unique(df1)
df2$Value <- lapply(seq_len(nrow(df2)),
function(x) nrow(df1[df1$COL1 == df2$COL1[x] & df1$COL2 == df2$COL2[x], ]))
> df2
COL1 COL2 Value
1 SP1 A 2
3 SP1 B 1
4 SP2 A 1
5 SP2 C 1
6 SP2 D 1
7 SP3 E 1
8 SP4 B 3
setDT(dt)
dt[, .(value=.N), .(COL1,COL2)]
# COL1 COL2 value
# 1: SP1 A 2
# 2: SP1 B 1
# 3: SP2 A 1
# 4: SP2 C 1
# 5: SP2 D 1
# 6: SP3 E 1
# 7: SP4 B 3
> aggregate(Value ~ ., cbind(df, Value = 1), sum)
COL1 COL2 Value
1 SP1 A 2
2 SP2 A 1
3 SP1 B 1
4 SP4 B 3
5 SP2 C 1
6 SP2 D 1
7 SP3 E 1