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