简体   繁体   English

将 3 列合并为一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM