[英]Combine 3 columns to one
I want to combine multiple columns to one column in a data frame.我想将多列合并为数据框中的一列。 I want a column that only shows last name and first name.
我想要一个只显示姓氏和名字的列。 I have a large data that looks similar to the following:
我有一个类似于以下内容的大数据:
Name_a<-c("","Steven", "Sara", "Eva", "(unknown)", "Joey", "", "Adam","(unknown)")
Last_n<-c("", "Lohan","","","Bright","Shane","Carter","","Graham")
person_n<-c("Shawn, Paris","(unknown", "Giselle, Sara","Dwayne, Eva","Brigth, Blue", "","Shane, Carter","Cardi, Adam","Graham, Mel" )
Alldata<-data.frame(Name_a,Last_n,person_n)
> Alldata
Name_a Last_n person_n
1 Shawn, Paris
2 Steven Lohan (unknown
3 Sara Giselle, Sara
4 Eva Dwayne, Eva
5 (unknown) Bright Brigth, Blue
6 Joey Shane
7 Carter Shane, Carter
8 Adam Cardi, Adam
9 (unknown) Graham Graham, Mel
>
This is what I have tried so far:到目前为止,这是我尝试过的:
Alldata<-mutate(Alldata,x=paste(Alldata$Name_a, Alldata$Last_n,Alldata$person_n))
Alldata
全数据
Name_a Last_n person_n x
1 Shawn, Paris Shawn, Paris
2 Steven Lohan (unknown Steven Lohan (unknown
3 Sara Giselle, Sara Sara Giselle, Sara
4 Eva Dwayne, Eva Eva Dwayne, Eva
5 (unknown) Bright Brigth, Blue (unknown) Bright Brigth, Blue
6 Joey Shane Joey Shane
7 Carter Shane, Carter Carter Shane, Carter
8 Adam Cardi, Adam Adam Cardi, Adam
9 (unknown) Graham Graham, Mel (unknown) Graham Graham, Mel
The result is not what I'm looking for.结果不是我要找的。
Any suggestion on how to fix this so that the new column will only show last name, first name?关于如何解决此问题以使新列仅显示姓氏,名字的任何建议?
Is this what you want?这是你想要的吗?
library(dplyr)
library(stringr)
Alldata %>%
mutate(x = case_when(
((str_detect(person_n, "unknown")) | (nchar(person_n) == 0)) ~ str_c(Last_n, Name_a, sep = ", "),
TRUE ~ person_n
))
x
<chr>
1 Shawn, Paris
2 Lohan, Steven
3 Giselle, Sara
4 Dwayne, Eva
5 Brigth, Blue
6 Shane, Joey
7 Shane, Carter
8 Cardi, Adam
9 Graham, Mel
Great solution up there.那里有很好的解决方案。 If you are looking for something more simple you can use the unite() function from the package tidyr.
如果您正在寻找更简单的东西,您可以使用 package tidyr 中的 unite() function。 Here is the syntax:
这是语法:
install.packages("tidyr") #or get everything with "tidyverse"
library(tidyr)
unite(Alldata, col="Name&surname", Name_a, Last_n, sep="#anyseparatoryouwant")
This is straightforward right?这很简单吧? the first argument is your dataframe: Alldata, the col= wants the name of the future column, pick anything;
第一个参数是你的 dataframe:Alldata,col= 想要未来列的名称,选择任何东西; then you give the names of the n columns you want to join: Name_a and Last_n in this case.
然后给出要加入的 n 列的名称:在本例中为 Name_a 和 Last_n。 Last you can add a separator with the sep= argument, you can event put a space just by entering:
最后,您可以使用 sep= 参数添加一个分隔符,您只需输入以下内容即可事件放置一个空格:
sep=" "
Check the unite() arguments with检查 unite() arguments 与
?unite
Hope this made it more simple!希望这让它变得更简单!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.