将新列添加到数据帧中,该数据帧包含一行中正值之和和和一行中负值之和-R

  • 本文关键字:数据帧 一行 新列 添加 包含一 r
  • 更新时间 :
  • 英文 :


我有一个数据帧df,看起来像这个

ID  A  B  C  D  E  F  G 
1   0  0  1 -1  1  0  0
2   1  1  1  0  0  0  0
3   -1 0  1  0  -1 -1 0 
.
. 
. 

我想在每行的末尾添加两列,显示正值的和和负值的和,所以df看起来像这个

ID  A  B  C  D  E  F  G pos neg
1   0  0  1 -1  1  0  0  2   -1
2   1  1  1  0  0  0  0  3    0
3   -1 0  1  0  -1 -1 0  1    -3 
.
. 
. 

我不知道该怎么做。我尝试了以下方法,将df转换为列表

df$neg <- rowSums(df < 0)

我还尝试了以下操作,它会弹出错误消息:
df[,c("A","B","c",:下标越界

df$neg <- rowSums(df[, c("A", "B", "C", "D", "E", "F", "G")] < 0)

任何帮助都将不胜感激,谢谢!

我们可以试试这个

cbind(
df,
pos = rowSums(df[-1] * (df[-1] > 0)),
neg = rowSums(df[-1] * (df[-1] < 0))
)

它给出

ID  A B C  D  E  F G pos neg
1  1  0 0 1 -1  1  0 0   2  -1
2  2  1 1 1  0  0  0 0   3   0
3  3 -1 0 1  0 -1 -1 0   1  -3

数据

> dput(df)
structure(list(ID = 1:3, A = c(0L, 1L, -1L), B = c(0L, 1L, 0L
), C = c(1L, 1L, 1L), D = c(-1L, 0L, 0L), E = 1:-1, F = c(0L,
0L, -1L), G = c(0L, 0L, 0L)), class = "data.frame", row.names = c(NA,
-3L))

使用dplyr:

df %>%
mutate(pos = rowSums(replace(.[-1],.[-1]<0,0)),
neg = rowSums(replace(.[-1],.[-1]>0,0)))

相关内容

最新更新