我试图从一个数据框的选择中计算非缺失列的总数。我可以用下面的代码来实现:
data %>%
select(
Rftrialnum,
Rfdaterando,
OID1treatmentcycle,
OID2treatmentcycle,
OID3treatmentcycle,
OID4treatmentcycle,
OID5treatmentcycle,
OID6treatmentcycle,
Eoipptpreg,
Eoicompletedoi
) %>%
rowwise() %>%
mutate(
count_cycle = sum(across(ends_with("treatmentcycle"), ~ !is.na(.)))
)
它对从OID1treatmentcycle
到OID6treatmentcycle
的非缺失值的数量求和,并保存为新变量cycle_count
。然而,它使用rowwise()
,考虑到 Dataframe 有数千行,这是非常慢的。有没有更有效的方法来做到这一点?
1条答案
按热度按时间yqlxgs2m1#
至少有三种变体。
考虑10 x 3示例 Dataframe
d
:1.与碱R:
1.使用
dplyr
,逐行改变(您的版本):1.使用dplyr的
c_across
进行跨列计算:速度(中位数为100次重复,使用{microbenchmark}测量)
因此,您可以使用
c_across
获得一些速度,但base R的速度要快180倍,正如@Leon Samson所指出的那样。