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