簡體   English   中英

將 3 列合並為一列

[英]Combine 3 columns to one

我想將多列合並為數據框中的一列。 我想要一個只顯示姓氏和名字的列。 我有一個類似於以下內容的大數據:

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
>

到目前為止,這是我嘗試過的:

Alldata<-mutate(Alldata,x=paste(Alldata$Name_a, Alldata$Last_n,Alldata$person_n))

全數據

     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

結果不是我要找的。

關於如何解決此問題以使新列僅顯示姓氏,名字的任何建議?

這是你想要的嗎?

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

那里有很好的解決方案。 如果您正在尋找更簡單的東西,您可以使用 package tidyr 中的 unite() function。 這是語法:

install.packages("tidyr") #or get everything with "tidyverse"
library(tidyr)
unite(Alldata, col="Name&surname", Name_a, Last_n, sep="#anyseparatoryouwant") 

這很簡單吧? 第一個參數是你的 dataframe:Alldata,col= 想要未來列的名稱,選擇任何東西; 然后給出要加入的 n 列的名稱:在本例中為 Name_a 和 Last_n。 最后,您可以使用 sep= 參數添加一個分隔符,您只需輸入以下內容即可事件放置一個空格:

sep=" "

檢查 unite() arguments 與

?unite

希望這讓它變得更簡單!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM