[英]Modification of one row of data to get an nice looking output (summary), reshape - split rows to new multiple columns
我再次需要你的帮助。 通常我知道如何解决我的问题,但在这种情况下我不知道。 这是我的数据示例:
df <- t(data.frame(b = list(c('C:1874 N:3493','C:2642 A:7 M:1 N:2717','A:5298 N:69','C:5366 Y:1','A:5359 G:8'))))
row.names(df) <- 'x'
colnames(df) <- c('V1','V2','V3','V4','V5')
df
V1 V2 V3 V4 V5
x "C:1874 N:3493" "C:2642 A:7 M:1 N:2717" "A:5298 N:69" "C:5366 Y:1" "A:5359 G:8"
我正在寻找一个存储在 df 中的不错的摘要,就像这样NA
可以替换为空白或零:
V1 V2 V3 V4 V5
A NA 7 5298 NA 5359
C 1874 2642 NA 5366 NA
N 3493 2717 69 NA NA
M NA 1 NA NA NA
Y NA NA NA 1 NA
G NA NA NA NA 8
到目前为止,我知道如何将元素从一列轻松拆分为新行:
library(tidyr)
separate_rows(as.data.frame(df), V1, sep = " ")
V1 V2 V3 V4 V5
<chr> <chr> <chr> <chr> <chr>
1 C:1874 C:2642 A:7 M:1 N:2717 A:5298 N:69 C:5366 Y:1 A:5359 G:8
2 N:3493 C:2642 A:7 M:1 N:2717 A:5298 N:69 C:5366 Y:1 A:5359 G:8
output 不是很好,因为所有剩余的列都填充了来自第一列的结果,但我想在sapply()
和cbind()
中执行此操作以获取一个数据帧,其中包含来自每个输入列的结果数据帧。 但不知道接下来会发生什么。 如何将每个字母放在第一列并做出很好的总结。
先感谢您!
这可以满足您的要求:
library(tidyverse)
df %>%
t() %>%
as_tibble(rownames = "colname") %>% # two columns: 'colname' (V1...V5) and 'x' (values)
separate_rows(x, sep = " ") %>% # spread 'x' over rows
separate(x, c("rowname", "value"), sep = ":") %>% # separate letter and value into two columns 'rowname' and 'value'
pivot_wider(names_from = "colname", values_from = "value") %>% # pivot into the wide form you want
arrange(rowname) # sort by rowname
这使
# A tibble: 6 x 6
rowname V1 V2 V3 V4 V5
<chr> <chr> <chr> <chr> <chr> <chr>
1 A NA 7 5298 NA 5359
2 C 1874 2642 NA 5366 NA
3 G NA NA NA NA 8
4 M NA 1 NA NA NA
5 N 3493 2717 69 NA NA
6 Y NA NA NA 1 NA
在基地 R 你可以做
FUN <- function(x) {
s <- strsplit(x, split=":")
d <- as.double(sapply(s, `[`, 2))
setNames(as.data.frame(t(d)), lapply(s, `[`, 1))
}
l <- lapply(lapply(unlist(df), function(x) el(strsplit(x, " "))), FUN)
res <- as.data.frame(t(Reduce(function(...) merge(..., all=TRUE, sort=FALSE), l)))
res
# V1 V2 V3 V4 V5
# A NA 7 5298 NA 5359
# C 1874 2642 NA 5366 NA
# N 3493 2717 69 NA NA
# M NA 1 NA NA NA
# Y NA NA NA 1 NA
# G NA NA NA NA 8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.