的R - 子集,包括计算列
问题描述:
比方说,我有这个简单的数据帧:的R - 子集,包括计算列
df <- data.frame(x=c(1,3,3,1,3,1), y = c(2,2,2,2,2,2),z = c('a','b','c','d','e','f'))
> df
x y z
1 1 2 a
2 3 2 b
3 3 2 c
4 1 2 d
5 3 2 e
6 1 2 f
我想子集,其中x= 3
,仅返回列x
和y
和包括计算科拉姆x+y
。
我可以得到前两件事情,但我无法得到caclulated列也出现。
df[df$x==3,c("x","y")]
我如何能做到这一点,但只使用base R
。
答
住在base
,在子集之前做一个rowSums
。
df$xy <- rowSums(df[, c("x", "y")])
df[df$x == 3, c("x", "y", "xy")]
# x y xy
# 2 3 2 5
# 3 3 2 5
# 5 3 2 5
就我个人而言,我更喜欢dplyr
方法,@akrun对您的问题发表了评论。
+0
我不能使用'dplyr'因为电脑上的安全。 'rowSum()'看起来不错,比我迄今为止做得好得多。 我喜欢'transform()',因为它允许我在相同的代码块中完成它。 – jmich738
答
你也可以这样做
df <- data.frame(x=c(1,3,3,1,3,1), y = c(2,2,2,2,2,2),z = c('a','b','c','d','e','f'))
df$z <- ifelse(df$x == 3, (df$x + df$y), df$y)
df
x y z
1 1 2 2
2 3 2 5
3 3 2 5
4 1 2 2
5 3 2 5
6 1 2 2
尝试'变换(DF [DF $ X = = 3,C( “X”, “Y”),新= X + Y)'或'mutate'库(dplyr); df%>%select(x,y)%>%filter(x == 3)%>%mutate(new = x + y)' – akrun