R数据争论

时间:2017-10-10 14:27:06

标签: r csv dataframe

我是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

提前致谢!

2 个答案:

答案 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)

使用dplyrtidyr的解决方案。这个解决方案遵循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