【发布时间】:2017-01-25 00:10:16
【问题描述】:
我有一个如下所示的数据框:
col1 col2 col3
0 0 .4
.3 1 0
0 0 .8
我想创建一个新列来计算其他三行中大于 0 的列值的数量:
col1 col2 col3 col4
0 0 .4 1
.3 1 0 2
0 0 .8 1
【问题讨论】:
我有一个如下所示的数据框:
col1 col2 col3
0 0 .4
.3 1 0
0 0 .8
我想创建一个新列来计算其他三行中大于 0 的列值的数量:
col1 col2 col3 col4
0 0 .4 1
.3 1 0 2
0 0 .8 1
【问题讨论】:
你只需要使用apply函数:
## Example Data
dd = data.frame(col1 = c(0, .3, 0), col2=c(0, 1, 0),
col3=c(0.4, 0, 0.8))
apply(dd, 1, function(i) sum(i > 0))
所以要添加这个也你现有的数据框:
dd$col4 = apply(dd, 1, function(i) sum(i > 0))
或者,我们可以将数据框转换为逻辑值,然后使用rowSums
rowSums(dd > 0)
【讨论】:
另一个选项是Reduce 和+ 在循环列以创建逻辑vectors 的list 之后
dd$col4 <- Reduce(`+`, lapply(dd, `>`, 0))
dd
# col1 col2 col3 col4
#1 0.0 0 0.4 1
#2 0.3 1 0.0 2
#3 0.0 0 0.8 1
【讨论】: