r语言 - 基于旧/新名称数据集重命名和合并列



一个令人困惑的标题。

最好用一个例子来解释。

我有以下数据

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

最新更新