R:如何将两列合并为一列(对于记录器列,不是按列合并)
R: How can I merge two column in one (for loger column, not merge by column )
例如,我有这个数据框:
Id
Age
1
14
2
28
我想做一个像这样的长专栏:
Id
new column
1
1
2
2
14
28
我该怎么办?
我们可以 unlist
数据并根据 max
length
通过填充 NA
创建列
lst1 <- list(df1$id, unlist(df1))
out <- data.frame(lapply(lst1, `length<-`, max(lengths(lst1))))
names(out) <- c("id", "new_column")
这是另一种方法:
df1 <- data.frame(New_column = c(df[,"Id"], df[,"Age"]))
merge(df$Id, df1, by="row.names", all=TRUE)[,-1]
输出:
x New_column
1 1 1
2 2 2
3 NA 14
4 NA 28
dplyr
的方法
library(dplyr)
df %>%
mutate(Age = Id) %>%
bind_rows(
df %>%
mutate(Id = NA)
) %>%
rename(new_column = Age)
# A tibble: 4 x 2
Id new_column
<int> <int>
1 1 1
2 2 2
3 NA 14
4 NA 28
例如,我有这个数据框:
Id | Age |
---|---|
1 | 14 |
2 | 28 |
我想做一个像这样的长专栏:
Id | new column |
---|---|
1 | 1 |
2 | 2 |
14 | |
28 |
我该怎么办?
我们可以 unlist
数据并根据 max
length
NA
创建列
lst1 <- list(df1$id, unlist(df1))
out <- data.frame(lapply(lst1, `length<-`, max(lengths(lst1))))
names(out) <- c("id", "new_column")
这是另一种方法:
df1 <- data.frame(New_column = c(df[,"Id"], df[,"Age"]))
merge(df$Id, df1, by="row.names", all=TRUE)[,-1]
输出:
x New_column
1 1 1
2 2 2
3 NA 14
4 NA 28
dplyr
library(dplyr)
df %>%
mutate(Age = Id) %>%
bind_rows(
df %>%
mutate(Id = NA)
) %>%
rename(new_column = Age)
# A tibble: 4 x 2
Id new_column
<int> <int>
1 1 1
2 2 2
3 NA 14
4 NA 28