R 基于跨多个列计算非NA值创建新列
我有一个广泛格式的问卷数据框架。对于一些问题,受访者被要求回答给定情景是否适用于他们(是,否)。如果情景适用于他们,则要求受访者提供情景示例(在某些情况下,可能不止一个示例) 我的数据集如下所示,Q1表示一个场景,而Q1a、Q1b和Q1c是开放式字段,用于提供所述场景的示例R 基于跨多个列计算非NA值创建新列,r,if-statement,R,If Statement,我有一个广泛格式的问卷数据框架。对于一些问题,受访者被要求回答给定情景是否适用于他们(是,否)。如果情景适用于他们,则要求受访者提供情景示例(在某些情况下,可能不止一个示例) 我的数据集如下所示,Q1表示一个场景,而Q1a、Q1b和Q1c是开放式字段,用于提供所述场景的示例 df <- data.frame(Q1 = c("Yes", "No", "Yes", "No", "Yes", "Yes", "Yes"), Q1a = c("AAA", NA, "AAA
df <- data.frame(Q1 = c("Yes", "No", "Yes", "No", "Yes", "Yes", "Yes"),
Q1a = c("AAA", NA, "AAA", NA, "ABC", "DDD", "EEE"),
Q1b = c("BBB", NA, NA, NA, "BCD", NA, "AAA"),
Q1c = c(NA, NA, NA, NA, "EFG", NA, "AAA"))
dfdf$column\u non\u NA=行和(!is.NA(df[-1]))
df
Q1 Q1a Q1b Q1c列_non_NA
1是AAA BBB 2
2号0
3是AAA 1
四零
5是ABC BCD EFG 3
6是DDD 1
7是EEE AAA AAA 3
df$column\u non\u NA=行和(!is.NA(df[-1]))
df
Q1 Q1a Q1b Q1c列_non_NA
1是AAA BBB 2
2号0
3是AAA 1
四零
5是ABC BCD EFG 3
6是DDD 1
7是EEE AAA AAA 3
以下是使用pmap
实现跨行应用函数效果的方法:
库(tidyverse)
df%
变异(
计数非数值=pmap(
.l=列表(Q1a、Q1b、Q1c),
.f=函数(…)和(!rlang::are_na(c(…))
)
)
#>Q1a Q1b Q1c计数不适用
#>1是AAA BBB 2
#>2号0
#>3是AAA 1
#>四零
#>5是ABC BCD EFG 3
#>6是DDD 1
#>7是EEE AAA AAA 3
由(v0.2.0)于2018年7月17日创建。以下是使用pmap
实现跨行应用函数效果的方法:
库(tidyverse)
df%
变异(
计数非数值=pmap(
.l=列表(Q1a、Q1b、Q1c),
.f=函数(…)和(!rlang::are_na(c(…))
)
)
#>Q1a Q1b Q1c计数不适用
#>1是AAA BBB 2
#>2号0
#>3是AAA 1
#>四零
#>5是ABC BCD EFG 3
#>6是DDD 1
#>7是EEE AAA AAA 3
由(v0.2.0)于2018-07-17创建。df$column\u non\u NA=rowSums(!is.NA(df[-1]))
df$column\u non\u NA=rowSums(!is.NA(df[-1])
df$count_non_NA <- ifelse(df$Q1 == "No", 0,
ifelse(df$Q1 == "Yes" & !is.na(df$Q1a) & !is.na(df$Q1b) & !is.na(df$Q1c), 3,
ifelse(df$Q1 == "Yes" & ((!is.na(df$Q1a) & !is.na(df$Q1b)) |
(!is.na(df$Q1b) & !is.na(df$Q1c))|
(!is.na(df$Q1a) & !is.na(df$Q1c))), 2, 1)))
df$column_non_NA= rowSums(!is.na(df[-1]))
df
Q1 Q1a Q1b Q1c column_non_NA
1 Yes AAA BBB <NA> 2
2 No <NA> <NA> <NA> 0
3 Yes AAA <NA> <NA> 1
4 No <NA> <NA> <NA> 0
5 Yes ABC BCD EFG 3
6 Yes DDD <NA> <NA> 1
7 Yes EEE AAA AAA 3