将多列转换为现有列
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
值放入一列(从 "wide" 格式移动到 "long" 格式)。然后我们就把"variable"这一列去掉,因为我们不需要区分plz
和plz1
,我们把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
我的数据如下:
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
值放入一列(从 "wide" 格式移动到 "long" 格式)。然后我们就把"variable"这一列去掉,因为我们不需要区分plz
和plz1
,我们把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