R 如何添加值与另一列对应的列?
我将总结如何获得我使用的数据帧:R 如何添加值与另一列对应的列?,r,dataframe,R,Dataframe,我将总结如何获得我使用的数据帧: name abundance 1 joe 1 2 tim 1 3 bob 1 4 joe 1 5 bob 1 首先,我通过聚合列创建了一个新的数据帧,并计算了相对频率: name abundance relative_ab 1 joe 2 0.4 2 tim 1 0.2 3 bob 2 0.4 但是我想在第一
name abundance
1 joe 1
2 tim 1
3 bob 1
4 joe 1
5 bob 1
首先,我通过聚合列创建了一个新的数据帧,并计算了相对频率:
name abundance relative_ab
1 joe 2 0.4
2 tim 1 0.2
3 bob 2 0.4
但是我想在第一个数据帧中添加一列,这样就有了冗余的条目和相对值(实际的数据集中有其他信息,通过聚合它们我会丢失这些信息)
我想我可以用暴力来解决这个问题,但我对R比较陌生,不知道你们会想出什么巧妙的方法
谢谢 您可以使用
match
执行此操作。假设第一个data.frame为df1,第二个为df2,则可以使用:
df1$relative_ab = df2$relative_ab[match(df1$name, df2$name)]
df1
name abundance relative_ab
1 joe 1 0.4
2 tim 1 0.2
3 bob 1 0.4
4 joe 1 0.4
5 bob 1 0.4
match
使用名称选择要使用的行
match(df1$name, df2$name)
[1] 1 2 3 1 3
如果您可以使用dplyr:
library(dplyr)
df %>%
mutate(s=sum(abundance)) %>%
group_by(name) %>%
mutate(relative_ab=sum(abundance)/s, s=NULL)
name abundance relative_ab
<fctr> <int> <dbl>
1 joe 1 0.4
2 tim 1 0.2
3 bob 1 0.4
4 joe 1 0.4
5 bob 1 0.4
库(dplyr)
df%>%
突变(s=总和(丰度))%>%
分组单位(名称)%>%
变异(相对_ab=总和(丰度)/s,s=空)
姓名和地址
1乔10.4
2 tim 1 0.2
3鲍勃10.4
4乔10.4
5鲍勃10.4
我们可以使用基本Rave
按name
分组,并将组丰度
总和
除以完整的丰度
df$relative_ab <- with(df,ave(abundance, name, FUN = function(x)
sum(x)/sum(abundance)))
df
# name abundance relative_ab
#1 joe 1 0.4
#2 tim 1 0.2
#3 bob 1 0.4
#4 joe 1 0.4
#5 bob 1 0.4
df$relative_ab我们可以用data.table来实现这一点
library(data.table)
setDT(df)[, relative_ab := sum(abundance)/sum(df$abundance) , name]
df
# name abundance relative_ab
#1: joe 1 0.4
#2: tim 1 0.2
#3: bob 1 0.4
#4: joe 1 0.4
#5: bob 1 0.4
merge(df1,df2,by=“name”)
library(data.table)
setDT(df)[, relative_ab := sum(abundance)/sum(df$abundance) , name]
df
# name abundance relative_ab
#1: joe 1 0.4
#2: tim 1 0.2
#3: bob 1 0.4
#4: joe 1 0.4
#5: bob 1 0.4