在r中的数据表中使用Group by时,选择长度最大的字符串

在r中的数据表中使用Group by时,选择长度最大的字符串,r,data.table,greatest-n-per-group,R,Data.table,Greatest N Per Group,我的初始样本数据不明确,因此更新我的数据集 a <- data.table(name=c("?","","One","?","","Two"), value=c(1,3,2,6,5,2) , job=c(1,1,1,2,2,2) ) name value job 1: ? 1 1 2: 3 1 3: One 2 1 4: ? 6 2 5: 5 2 6: Two 2 2 我想我想

我的初始样本数据不明确,因此更新我的数据集

a <- data.table(name=c("?","","One","?","","Two"), value=c(1,3,2,6,5,2) , job=c(1,1,1,2,2,2) )

 name value job
1:    ?     1   1
2:          3   1
3:  One     2   1
4:    ?     6   2
5:          5   2
6:  Two     2   2

我想我想要在R中的等效值,我们可以按“作业”分组,获得“名称”中字符数(
nchar
)的索引,并将数据集子集

a[, .SD[which.max(nchar(name)) ], by = job]
#    name value job
#1:  One     3   1
#2:  Two     6   2
a[a[, .I[which.max(nchar(name))], by = job]$V1]
或者从
which.max
中获取行索引(
.I
),用索引(“V1”)提取列并对数据集进行子集化

a[, .SD[which.max(nchar(name)) ], by = job]
#    name value job
#1:  One     3   1
#2:  Two     6   2
a[a[, .I[which.max(nchar(name))], by = job]$V1]
更新 根据新示例,如果“值”与“名称”中的最大字符数不对应,则需要单独选择它

a[, .(value= max(value), name = name[which.max(nchar(name))]),
                      by = job]
#     job value name
#1:   1     3  One
#2:   2     6  Two

我不确定您是否想要dplyr解决方案,但这里有一个:

library(dplyr)
a %>% group_by(job) %>% slice(which.max(nchar(as.character(name))))

    name value   job
  (fctr) (dbl) (dbl)
1    One     3     1
2    Two     6     2

抱歉搞混了!在最大值位于其他位置的情况下,您的解决方案将不起作用。我现在已经更新了样本数据集。@pauljeba根据您在另一个答案中看到的情况,修复是显而易见的:将max切换到which.max。如果你要编辑你的问题以使答案无效,请随意“修正”答案以匹配你编辑的问题。@Frank I Din没有改变问题,只是给出了一个更清楚的例子。谢谢你的建议。很抱歉给你带来困惑!在最大值位于其他位置的情况下,您的解决方案将不起作用。我现在已经更新了我的样本数据集。这太棒了!!我不知道这是可能的!请注意,除了最长的文本外,我还想找到“值”的最大值。我现在已经更新了我的样本数据集。通常的副本:@Frank请在发布前仔细阅读