基于R

时间:2016-08-09 15:13:14

标签: r dataframe aggregate

在R中我有数据

Name   number
Peter   14
peter   2
hans    11
...

我的问题是如何找到带有大字母的名字并将它们组合成小写字母。例如,我想要将peterPeter以及number的总和结合起来,在这种情况下,这是{+ 1}}是14 + 2 = 16。

假设我有超过500个名字,其中一些以小写字母开头,一些以大字母开头 - 我应该如何解决这个问题呢?

感谢。

3 个答案:

答案 0 :(得分:3)

您可以将aggregate()tolower()结合使用。因此,所有名称仅转换为小字符。然后使用sum应用聚合。这可以存储到一个新对象,比方说dfAgg

df <- data.frame(name = c("Peter", "peter", "Hans", "hans"), number = c(14,2,11,3))

dfAgg <- aggregate(number ~ tolower(name), data = df, sum)
dfAgg
# tolower(name) number
#          hans     14
#         peter     16

答案 1 :(得分:0)

好吧,你可以忽略区分大小写。将所有名称设为上限或下限,然后计算数量。 例如:

  • 在toupper(&#34;彼得&#34)
  • 在toupper(&#34;彼得&#34)

答案 2 :(得分:0)

尝试:

names_nums <- read.table(text="Name   number
Peter   14
peter   2
hans    11", header=T)

sum(names_nums[tolower(names_nums$Name) == "peter",]$number)

您可以按如下方式获得所有这些的总和:

do.call(rbind,lapply(split(names_nums, tolower(names_nums$Name)), function(x) {
    sum(x$number)
}))

谢谢!