我有一个带有因子变量的数据框,以及一个有助于对这些因子进行分组的ID。这是我的示例数据框和当前未获得正确答案的随附代码:
library(dplyr)
names <- c("Andrew","Andrew","Andy","Andy","Alex","Alexander")
name.id <- c(1,1,1,1,2,2)
df1 <- data.frame(names, name.id)
df1 <- group_by(df1,name.id) %>%
mutate(name.len=nchar(as.character(names))) %>%
mutate(new.name = min(as.character(names)))
我希望new.name变量等于具有最少字符数(name.len)的ID分组中的名称。对于ID = 1,该变量应为“ Alex”,但是使用最小变量只能比较每个数字中的字符,从而导致“ Andrew”中的“ r”低于“ Andy”中的“ y”。我不知道如何做一个条件变量来获取与组内最小nchar值相关的这个因素
编辑: 更清楚地说,我希望最终数据看起来像以下内容(帮助列也可以):
names name.id new.names
1 Andrew 1 Andy
2 Andrew 1 Andy
3 Andy 1 Andy
4 Andy 1 Andy
5 Alex 2 Alex
6 Alexander 2 Alex
答案 0 :(得分:1)
您可以对name.id
进行分组,然后根据sort
中的字符数对names
进行分组。最后,为每个组选择最上面的行。
使用dplyr
的解决方案可以是:
library(dplyr)
df1 %>% group_by(name.id) %>%
mutate(newname = first(names, order_by = nchar(as.character(names)))) %>%
as.data.frame()
# names name.id newname
# 1 Andrew 1 Andy
# 2 Andrew 1 Andy
# 3 Andy 1 Andy
# 4 Andy 1 Andy
# 5 Alex 2 Alex
# 6 Alexander 2 Alex