R 数据争用

R 数据争用,r,csv,dataframe,R,Csv,Dataframe,我是R新手,我有一个包含值的csv文件: 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

我是R新手,我有一个包含值的csv文件:

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
我需要将其转换为数据帧格式:

A,B,C1,D1
A,B,C1,D2
A,B,C2,D3
A,B,C2,D4

提前谢谢

使用
zoo

library(zoo)
df[df==' '] <- NA
df[1:3] <- lapply(df[1:3], na.locf0, fromLast = FALSE)
df <- df[!is.na(df$V4),]
df
或者通过使用magrittr,我们也可以根据此管道编写上述代码:

library(magrittr)
library(zoo)

df %>% 
   replace(. == ' ', NA) %>%
   replace(1:3, lapply(.[1:3], na.locf0, fromLast = FALSE)) %>%     
   subset(!is.na(V4))

使用
dplyr
tidyr
的解决方案。此解决方案遵循Gregor评论中的链接。但是,我没有使用
zoo
包,而是在这里展示了
tidyr
中的
fill
函数、base R中的
na.ommit
函数和
dplyr
中的
distinct
函数的使用

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
库(dplyr)
图书馆(tidyr)
dt2%
填充(所有内容(),.direction=“down”)%>%
na.省略()%>%
不同(V4,.keep_all=TRUE)
dt2
V1 V2 V3 V4
1A B C1 D1
2 A B C1 D2
3 A B C2 D3
4 A B C2 D4
数据

dt <- read.table(text = "V1 V2 V3 V4
1  A NA NA NA         
                 2  NA  B NA NA      
                 3  NA  NA  C1 NA   
                 4  NA  NA  NA D1
                 5  NA  NA  NA D2
                 6  NA  NA  C2 NA   
                 7  NA  NA  NA D3
                 8  NA  NA  NA D4",
                 header = TRUE, stringsAsFactors = FALSE)

dt欢迎来到SO。您可以发布dput(dat)
的结果吗?看起来您可以进行上一次的观察,然后删除重复项。@G.Grothendieck的可能重复项请随意修改;-)谢谢分配,这是优雅的我用这个作为基础。
dt <- read.table(text = "V1 V2 V3 V4
1  A NA NA NA         
                 2  NA  B NA NA      
                 3  NA  NA  C1 NA   
                 4  NA  NA  NA D1
                 5  NA  NA  NA D2
                 6  NA  NA  C2 NA   
                 7  NA  NA  NA D3
                 8  NA  NA  NA D4",
                 header = TRUE, stringsAsFactors = FALSE)