onh*_*alu 9 string comparison select r dplyr
我有这种类型的数据集
DF
V1 V2 V3
1. A AAA B
2. BBB B CC
3. C BB CCC
Run Code Online (Sandbox Code Playgroud)
我想从 DF 中选择最长的字符串并将其放入新列 WINNER 中,如下所示:
DF
V1 V2 V3 WINNER
1. A AAA B AAA
2. BBB B CC BBB
3. C BB CCC CCC
Run Code Online (Sandbox Code Playgroud)
我试过了
mutate( WINNER = select(which.max (c(nchar(V1), nchar(V2), nchar(V3)))
Run Code Online (Sandbox Code Playgroud)
但它仅适用于数值。我更喜欢 dplyr 解决方案。
df$winner <- apply(df,1, function(x) x[which.max(nchar(x))])
df
V1 V2 V3 winner
1. A AAA B AAA
2. BBB B CC BBB
3. C BB CCC CCC
Run Code Online (Sandbox Code Playgroud)
在平局的情况下,获胜者将基于首次出场:
df$WINNER <- apply(df, 1, function(row) row[which.max(nchar(row))])
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用c_across()
。您在其中输入的内容将控制选择哪些列。
library(dplyr)
df %>%
rowwise() %>%
mutate(WINNER = c_across(starts_with("V"))[which.max(nchar(c_across(starts_with("V"))))])
Run Code Online (Sandbox Code Playgroud)
如果您想要所有列,它可以更紧凑一些。
df %>%
rowwise() %>%
mutate(WINNER = c_across()[which.max(nchar(c_across()))])
Run Code Online (Sandbox Code Playgroud)