我是R的新手,我有一个包含值的csv文件:
coord
将数据加载到数据框中:
A, , ,
,B, ,
, ,C1,
, , ,D1
, , ,D2
, ,C2,
, , ,D3
, , ,D4
我需要将其与数据框格式纠缠在一起:
dat = read.csv("~/RData/test.csv", header = FALSE)
dat
# V1 V2 V3 V4
# 1 A
# 2 B
# 3 C1
# 4 D1
# 5 D2
# 6 C2
# 7 D3
# 8 D4
提前致谢!
答案 0 :(得分:2)
使用zoo
library(zoo)
df[df==' '] <- NA
df[1:3] <- lapply(df[1:3], na.locf0, fromLast = FALSE)
df <- df[!is.na(df$V4),]
df
,并提供:
V1 V2 V3 V4
4 A B C1 D1
5 A B C1 D2
7 A B C2 D3
8 A B C2 D4
或者通过使用magrittr,我们可以根据这个管道编写上面的代码:
library(magrittr)
library(zoo)
df %>%
replace(. == ' ', NA) %>%
replace(1:3, lapply(.[1:3], na.locf0, fromLast = FALSE)) %>%
subset(!is.na(V4))
答案 1 :(得分:2)
使用dplyr
和tidyr
的解决方案。这个解决方案遵循Gregor评论中的链接。但是,我不是使用zoo
包,而是使用fill
中的tidyr
函数,来自基本R的na.omit
和来自{{1的distinct
函数}}
dplyr
数据强>
library(dplyr)
library(tidyr)
dt2 <- dt %>%
fill(everything(), .direction = "down") %>%
na.omit() %>%
distinct(V4, .keep_all = TRUE)
dt2
V1 V2 V3 V4
1 A B C1 D1
2 A B C1 D2
3 A B C2 D3
4 A B C2 D4