选择R中字符串最长的列
我有这种类型的数据集选择R中字符串最长的列,r,string,select,dplyr,comparison,R,String,Select,Dplyr,Comparison,我有这种类型的数据集 DF V1 V2 V3 1. A AAA B 2. BBB B CC 3. C BB CCC 我想从DF中选择最长的字符串,并将其放入新的WINNER列,如下所示: DF V1 V2 V3 WINNER 1. A AAA B AAA 2. BBB B CC BBB 3. C
DF
V1 V2 V3
1. A AAA B
2. BBB B CC
3. C BB CCC
我想从DF中选择最长的字符串,并将其放入新的WINNER列,如下所示:
DF
V1 V2 V3 WINNER
1. A AAA B AAA
2. BBB B CC BBB
3. C BB CCC CCC
我试过了
mutate( WINNER = select(which.max (c(nchar(V1), nchar(V2), nchar(V3)))
但它只适用于数值。我更喜欢dplyr解决方案。如果是平局,赢家将根据第一次出现:
df$WINNER <- apply(df, 1, function(row) row[which.max(nchar(row))])
一个dplyr选项可能是
df %>%
rowwise() %>%
mutate(WINNER = get(paste0("V", which.max(nchar(c_across(V1:V3))))))
V1 V2 V3 WINNER
<chr> <chr> <chr> <chr>
1 A AAA B AAA
2 BBB B CC BBB
3 C BB CCC CCC
你可以使用c_跨越。输入的内容将控制选择的列
图书馆弹琴
df%>%
行%>%
mutateWINNER=c_acrosssstarts_with v[哪个.maxncharc_acrosssstarts_with v]
如果需要所有列,它可以更紧凑一些
df%>%
行%>%
mutateWINNER=c_横跨[which.maxncharc_横跨]
遗憾的是,R中的max/min没有像python中那样的关键参数,但是可以很快编写出类似的东西。我建议这样做:
DF
V1 V2 V3 WINNER
1. A AAA B AAA
2. BBB B CC BBB
3. C BB CCC CCC
图书馆管理员
df%
变异
winner=最大键跨1:V3,str\u长度
>一个tibble:3x4
>顺时针:
>V1 V2 V3获胜者
>
>1 A AAA B AAA
>2 BBB CC BBB
>3 C BB CCC
由v0.3.0于2020-06-26创建,是否可以只选择一些列?是的,在应用功能中,用df[,2:ncoldf]或df[,cV2,V3]或您喜欢的方式替换df。是否可以只选择一些列?另一个基本R选项:df[cbindseq_lennrowdf,max.colsappylydf,nchar]
df %>%
rowwise() %>%
mutate(WINNER = get(paste0("V", which.max(nchar(c_across(V1:V3))))))
V1 V2 V3 WINNER
<chr> <chr> <chr> <chr>
1 A AAA B AAA
2 BBB B CC BBB
3 C BB CCC CCC