tibble 的所有列中的按行部分匹配
Rowwise partial match in all columns of a tibble
假设以下小标题
tibble(
examform1 = c("Bla bla bla pass/fail", "Bla bla bla 7 point scale", "Bla bla pass fail"),
examform2 = c("passfail bla", "7pointscale bla", "Bla bla")
)
# A tibble: 3 × 2
examform1 examform2
<chr> <chr>
1 Bla bla bla pass/fail passfail bla
2 Bla bla bla 7 point scale 7pointscale bla
3 Bla bla pass fail Bla bla
我想计算字符串在以下两个向量中的出现次数 - 具体来说,我想以 2 列结束,一列计算向量传递中任何字符串的出现次数,另一列同样对于向量比例
pass <- c("pass/fail", "pass fail", "passfail")
scale <- c("7 point scale", "7pointscale")
我有一个非常大的数据框,希望跨 所有 变量执行操作,因为我不确定哪些变量对于我需要的信息很重要被储存了。它应该是这样的:
# A tibble: 3 × 4
examform1 examform2 occurence_pass pass_scale
<chr> <chr> <dbl> <dbl>
1 Bla bla bla pass/fail passfail bla 2 0
2 Bla bla bla 7 point scale 7pointscale bla 0 1
3 Bla bla pass fail Bla bla 1 0
我可以将所有变量粘贴在一起并从那里继续 - 但我认为这会很慢,因为我的真实字符串真的很长,而且我不确定粘贴后如何继续。
非常感谢任何帮助,我希望我把我的问题说清楚了:-)!
您可以按行应用grepl
,即
df$occurence_pass <- colSums(apply(df, 1, function(i)grepl(paste(pass, collapse = '|'), i)))
df$pass_scale <- colSums(apply(df, 1, function(i)grepl(paste(scale, collapse = '|'), i)))
df
# A tibble: 3 x 4
examform1 examform2 occurence_pass pass_scale
<chr> <chr> <dbl> <dbl>
1 Bla bla bla pass/fail passfail bla 2 0
2 Bla bla bla 7 point scale 7pointscale bla 0 2
3 Bla bla pass fail Bla bla 1 0
假设以下小标题
tibble(
examform1 = c("Bla bla bla pass/fail", "Bla bla bla 7 point scale", "Bla bla pass fail"),
examform2 = c("passfail bla", "7pointscale bla", "Bla bla")
)
# A tibble: 3 × 2
examform1 examform2
<chr> <chr>
1 Bla bla bla pass/fail passfail bla
2 Bla bla bla 7 point scale 7pointscale bla
3 Bla bla pass fail Bla bla
我想计算字符串在以下两个向量中的出现次数 - 具体来说,我想以 2 列结束,一列计算向量传递中任何字符串的出现次数,另一列同样对于向量比例
pass <- c("pass/fail", "pass fail", "passfail")
scale <- c("7 point scale", "7pointscale")
我有一个非常大的数据框,希望跨 所有 变量执行操作,因为我不确定哪些变量对于我需要的信息很重要被储存了。它应该是这样的:
# A tibble: 3 × 4
examform1 examform2 occurence_pass pass_scale
<chr> <chr> <dbl> <dbl>
1 Bla bla bla pass/fail passfail bla 2 0
2 Bla bla bla 7 point scale 7pointscale bla 0 1
3 Bla bla pass fail Bla bla 1 0
我可以将所有变量粘贴在一起并从那里继续 - 但我认为这会很慢,因为我的真实字符串真的很长,而且我不确定粘贴后如何继续。
非常感谢任何帮助,我希望我把我的问题说清楚了:-)!
您可以按行应用grepl
,即
df$occurence_pass <- colSums(apply(df, 1, function(i)grepl(paste(pass, collapse = '|'), i)))
df$pass_scale <- colSums(apply(df, 1, function(i)grepl(paste(scale, collapse = '|'), i)))
df
# A tibble: 3 x 4
examform1 examform2 occurence_pass pass_scale
<chr> <chr> <dbl> <dbl>
1 Bla bla bla pass/fail passfail bla 2 0
2 Bla bla bla 7 point scale 7pointscale bla 0 2
3 Bla bla pass fail Bla bla 1 0