我有一个数据集,其中一堆字符列只有一个值,即列本身的名称。每一行都是一个观察值,我想计算每一行有多少这样的列。
例如:
id multi_value_col single_value_col_1 single_value_col_2
1 A single_value_col_1
2 D2 single_value_col_1 single_value_col_2
3 Z6 single_value_col_2
我想要的是添加一个列,该列计算每行有多少个单值列。如下所示:
id multi_value_col single_value_col_1 single_value_col_2 count
1 A single_value_col_1 1
2 D2 single_value_col_1 single_value_col_2 2
3 Z6 single_value_col_2 1
我最初的想法是使用mutate_if
和n_distinct
,将字符串替换为TRUE
,然后可以在带有rowSums的mutate
中使用:
data %>%
mutate_if(~n_distinct(.) == 1, TRUE, .) %>%
mutate(count = rowSums???)
然而,我不能让mutate_if
工作,我也不确定rowSums命令--有没有跨行的sum_if真正的操作?
发布于 2019-06-26 09:40:29
根据您的数据或空白单元格中是否有NA
,您可以使用以下基R方法之一,我们首先找出只有一个唯一值的列,然后计算这些列中每行的非NA或非空单元格的数量。
如果你有NA
的
cols <- which(sapply(df, function(x) length(unique(na.omit(x)))) == 1)
df$count <- rowSums(!is.na(df[cols]))
df
# id multi_value_col single_value_col_1 single_value_col_2 count
#1 1 A single_value_col_1 <NA> 1
#2 2 D2 single_value_col_1 single_value_col_2 2
#3 3 Z6 <NA> single_value_col_2 1
如果您有空单元格
cols <- which(sapply(df, function(x) length(unique(x[x!=""]))) == 1)
df$count <- rowSums(df[cols] != "")
https://stackoverflow.com/questions/56763524
复制相似问题