您好我是R的新手,我正在尝试解决可能非常简单的问题。 所以,这是:
c1 c2 c3 c4
a 8 f 5
b 9 c 4
c 7 b 3
d 5 a 2
e 1 d 5
f 5 e 4
我想匹配列c1和c3并获得c2和c4的总和 所以答案应该是
a 10
b 12
c 11
...
我使用了匹配功能来获得2列之间的匹配,我得到了,但我不知道如何从其他列获得总数
请帮助我,这只是一个例子,但如果有效,我可以解决我的测序数据。
谢谢。答案 0 :(得分:2)
您可以尝试以下内容:
## Your data.frame
df <- data.frame(c1=letters[1:6], c2=c(8,9,7,5,1,5),
c3=c("f", "c", "b", "a", "d", "e"), c4=c(5,4,3,2,5,4))
## Match the indices of column 1 to column 3
m <- match(df$c1, df$c3)
## Sum columns 2 and 4, where 4 is rearanged to match column 1
data.frame(c1 = df$c1, ans = df$c2 + df$c4[m])
## c1 ans
## 1 a 10
## 2 b 12
## 3 c 11
## 4 d 10
## 5 e 5
## 6 f 10
希望它有所帮助,
亚历
答案 1 :(得分:1)
这可能不是最有效的方法,但应该有效:
# Split the data into two frames
temp1 = data.frame(a=data$a, b=data$b)
temp2 = data.frame(c=data$c, d=data$d)
#Now merge them based on the 'a' and 'c' columns
out = merge(temp1,temp2, by.x='a', by.y='c')
#Now we can sum the 'b' and 'd' columns
out$sum = out$b+out$d
那应该给你你想要的东西?
答案 2 :(得分:1)
这也可行
#sample data
dd<-data.frame(
c1 = c("a", "b", "c", "d", "e", "f"),
c2 = c(8L, 9L, 7L, 5L, 1L, 5L),
c3 = c("f", "c", "b", "a", "d", "e"),
c4 = c(5L, 4L, 3L, 2L, 5L, 4L)
)
#stopifnot(levels(dd$c1)=levels(dd$c3))
sums <- with(dd, c2[order(c1)]+c4[order(c3)])
基本上你只是求助c2
和c4
所以它们与配对因子相对应,然后直接添加。
答案 3 :(得分:0)
这是一个建议,但只有当c1和c3的元素都是唯一的时才会起作用。如果是这种情况,您可以使用which()
功能。这样的事情:c2[which(c1 == x)] + c4[which(c3) == x]
会给出c1为x时c2值和c3为x时c4值的总和。