我一直在 R 中寻找一个命令,它允许我仅按字段中的一部分而不是整个字段进行分组。我想出了一个可行的解决方法,但它有点麻烦和笨拙。这是一个测试数据框
name.list = data.frame(Name=c("jeff banks", "phil lender", "jeff brooks",
"barbara holcomb", "danny jefferson"),Age=c(27,34,25,45,32))
name.list
这是输出
Name Age
1 jeff banks 27
2 phil lender 34
3 jeff brooks 25
4 barbara holcomb 45
5 danny jefferson 32
我想识别所有包含“jeff”的姓名 所以我可以将其作为一个组使用或分配一个虚拟变量。换句话说,附加 我的数据框是这样的:
Name Age Jeff.field
1 jeff banks 27 1
2 phil lender 34 0
3 jeff brooks 25 1
4 barbara holcomb 45 0
5 danny jefferson 32 1
我想出了这个解决方案,但它不是很优雅
name.list2=name.list[grep("jeff",name.list$Name),]
name.list2$jeff.field=rep(1,dim(name.list2)[1])
name.list3=name.list[-grep("jeff",name.list$Name),]
name.list3$jeff.field=rep(0,dim(name.list3)[1])
name.list4=rbind(name.list2,name.list3)
name.list4
这让我得到这个数据框
Name Age jeff.field
1 jeff banks 27 1
3 jeff brooks 25 1
5 danny jefferson 32 1
2 phil lender 34 0
4 barbara holcomb 45 0
有人知道更基本的方法吗?
最佳答案
给你:
name.list$jeff.field <- grepl("jeff", name.list$Name)
name.list[order(name.list$jeff.field), ]
Name Age jeff.field
2 phil lender 34 FALSE
4 barbara holcomb 45 FALSE
1 jeff banks 27 TRUE
3 jeff brooks 25 TRUE
5 danny jefferson 32 TRUE
关于r - 在 R 中寻找更好的方法来按字段的一部分进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10955340/