R 计算每行输入的列数
可能是一个非常基本的问题,但我想不出来。 假设以下测试代码:R 计算每行输入的列数,r,R,可能是一个非常基本的问题,但我想不出来。 假设以下测试代码: test1 = tibble::tribble( ~name1, ~name2, ~name3, ~name4, ~name5, "B565", "F226", NA, NA, NA, "W342", "DUPLICATE", NA, NA, NA, "H452&
test1 = tibble::tribble(
~name1, ~name2, ~name3, ~name4, ~name5,
"B565", "F226", NA, NA, NA,
"W342", "DUPLICATE", NA, NA, NA,
"H452", "K632", "L553", "DUPLICATE", "R551"
)
Created on 2021-06-08 by the reprex package (v2.0.0)
不,我只想计算每一行在没有NAs的情况下有多少条目,并将结果放入一个新列test1$itemno
我觉得rowSum是个好主意
谢谢你的帮助 我的解决方案如下:
total=c()
对于(i in 1:length(test1$name1)){
总计=c(总计,总和(test1[i,]!=“”)
}
test1$itemno=total
测试1
输出
#一个tible:3 x 6
名称1名称2名称3名称4名称5项目编号
1 B565 F226“2
2 W342重复“”2
3 H452 K632“L553”重复“R551”5
注意:您可能可以使用该系列中的函数找到更优雅的解决方案。使用
dplyr
:
库(dplyr)
测试1%>%
行()
变异(itemno=sum(!c_overs()=“”)
dplyr
如果没有rowwise
您可以这样做
库(dplyr)
test1%>%变异(项计数=行和(当前数据()!=“”))
#>#tibble:3 x 6
#>名称1名称2名称3名称4名称5项目计数
#>
#>1 B565 F226“2
#>2 W342重复“”2
#>3 H452 K632“L553”重复“R551”5
由(v2.0.0)于2021-06-07创建
关于修订数据
test1 %>% mutate(item_count = rowSums(!is.na(cur_data())))
# A tibble: 3 x 6
name1 name2 name3 name4 name5 item_count
<chr> <chr> <chr> <chr> <chr> <dbl>
1 B565 F226 NA NA NA 2
2 W342 DUPLICATE NA NA NA 2
3 H452 K632 L553 DUPLICATE R551 5
test1%>%mutate(item\u count=rowSums(!is.na(cur\u data()))
#一个tibble:3x6
名称1名称2名称3名称4名称5项目计数
1 B565 F226 NA 2
2 W342重复NA 2
3 H452 K632 L553重复R551 5
我们也可以
test1$item_count <- rowSums(test1 != ''))
test1$item_count感谢您对空字符串的回答,这很好。现在我更新了代码,并将NA替换为空字符串,但如果我替换!=''去=NA计数不再起作用了。@MaxH。这不是处理NAs的正确方法。使用is.na()或!是不是很完美,谢谢