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的地方进行子集,仅返回列xy,并包括计算的列x+y
我可以完成前 2 件事,但我无法让 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对您的问题发表了评论。

你也可以这样做

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

最新更新