一个令人困惑的标题。
最好用一个例子来解释。
我有以下数据
df <- "Green.Apple Red.Apple Pears Orange Lemon Lime
1 3 5 4 4 0 5
2 3 0 2 7 2 11
3 2 7 8 0 3 1
4 0 6 3 5 6 0 "
df <-read.table(text=df,header=T)
我想根据旧/新名称重命名列,然后根据新旧名称合并这些列。如果要重命名的列也与另一列相同,则将对它们求和。我将名称带入工作区:
names <- "Original New
1 Green.Apple Apple
2 Red.Apple Apple
3 Pears Pear
4 Orange Orange
5 Lemon Cirtus
6 Lime Cirtus"
#
names <-read.table(text=names,header=T)
我已经尝试了各种解决方法。 例如,它们将始终具有相同长度的名称,因此可以简单地通过列表重命名列,但这是不正确的,可能会导致我尝试完成的更大任务出错。
这就是我正在寻找的:
yay <- "Apple Pear Orange Cirtus
1 8 4 4 5
2 3 2 7 13
3 9 8 0 4
4 6 3 5 6"
非常感谢
吉姆 (有争议:也对熊猫替代品开放(
你也可以做:
names(df) <- names$New[match(names(df), names$Original)]
t(rowsum(t(df), group = colnames(df), na.rm = T))
# > t(rowsum(t(df), group = colnames(df), na.rm = T))
# Apple Cirtus Orange Pear
# 1 8 5 4 4
# 2 3 13 7 2
# 3 9 4 0 8
# 4 6 6 5 3
使用match
将旧名称与新名称匹配并重命名df
。然后使用split.default
根据相似名称进行拆分并对相似列求和。
names(df) <- names$New[match(names(df), names$Original)]
sapply(split.default(df, names(df)), rowSums)
# Apple Cirtus Orange Pear
#1 8 5 4 4
#2 3 13 7 2
#3 9 4 0 8
#4 6 6 5 3