繁体   English   中英

将多列转换为现有列

[英]Convert multiple columns to a existing column

我的数据看起来像:

data.frame(name=c("city","village"),code=c(10322,10321),plz=c(7041,7043),plz1=c(7044,7044),plz2=c(7043,NA))

plz1列和plz2转换为 plz 的最聪明方法是什么:

name  code   plz

city  10322  7041

city  10322  7044

city  10322  7043

首先,我们melt ,将所有plz值放入一列(从“宽”格式到“长”格式)。 然后我们只需删除“变量”列,因为我们不需要区分plzplz1 ,我们将value重命名为plz

require(reshape2)

df1 <- data.frame(name=c("city","village"),code=c(10322,10321),plz=c(7041,7043),plz1=c(7044,7044),plz2=c(7043,NA))

df1 <- melt(df1, id.vars=c("name", "code"))

df1 <- df1[,-3]

names(df1) <- c("name", "code", "plz")

     name  code  plz
1    city 10322 7041
2 village 10321 7043
3    city 10322 7044
4 village 10321 7044
5    city 10322 7043
6 village 10321   NA

我们可以进一步简化并结合dplyr包:

require(dplyr)
require(reshape2)

df1 %>% melt(id.vars=c("name", "code")) %>% 
  select(-variable) %>% 
  rename(plz=value)

使用 tidyr 和 dplyr 包。

df <- data.frame(name=c("city","village"),code=c(10322,10321), plz=c(7041,7043),plz1=c(7044,7044),plz2=c(7043,NA))
df %>% tidyr::gather(type, plz, plz:plz2) %>% dplyr::select(-type) %>% dplyr::filter(name == 'city')

#name   code    plz
#city   10322   7041
#city   10322   7044
#city   10322   7043

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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