【发布时间】:2018-05-21 09:46:29
【问题描述】:
我试图在每行的数据框中获取所有出现的值,如下所示:
a b c d e
1 1 1 0 -1 NA
2 0 -1 -1 1 NA
3 -1 0 NA NA 1
到这里
a b c d e count.-1 count.0 count.1 count.NA
1 1 1 0 -1 NA 1 1 2 1
2 0 -1 -1 1 NA 2 1 1 1
3 1 0 NA NA 1 0 1 2 2
我现在正在这样做:
df = df %>%
by_row(
..f = function(x) {
sum(is.na(x[1:8]))
},
.to = "count_na",
.collate = "cols"
) %>%
by_row(
..f = function(x) {
sum(x[1:8] == 1, na.rm = T)
},
.to = "count_positive",
.collate = "cols"
) %>%
by_row(
..f = function(x) {
sum(x[1:8] == -1, na.rm = T)
},
.to = "count_negative",
.collate = "cols"
) %>%
by_row(
..f = function(x) {
sum(x[1:8] == 0, na.rm = T)
},
.to = "count_neutral",
.collate = "cols"
)
但问题是,对于 5 百万行,这需要永远完成(超过 3 小时,有没有更好的方法来做到这一点?
【问题讨论】:
-
可能重复 stackoverflow.com/questions/24015557/… ,效率不高,但应该比您当前的版本更快。
-
试试
cbind(df1, t(apply(df1, 1, table, exclude = NULL)))