Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择R中字符串最长的列_R_String_Select_Dplyr_Comparison - Fatal编程技术网

选择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