【发布时间】:2020-05-08 21:23:52
【问题描述】:
我有一个导入为 data.frame 的 csv 文件,问题是每行必须有 4 个元素(4 列),其中一些可能有不同数量的元素,我的意思是:
ID col1 col2 col3 col4
id1 dA dB dC dD
id2 aA aB aC aD
id3 mA mB mC
id4 xA xB xC XD
我正在使用 tidyr,当我导入数据时,它会用 NA 填充每个缺失的元素,在本例中是 col4 处的 id3。
id3 mA mB mC NA
我想修复每行中少于 4 个元素的所有行(如 id3),只是在缺少的元素中添加一个未分类 (UNC) 的内容,例如:
ID col1 col2 col3 col4
id1 dA dB dC dD
id2 aA aB aC aD
id3 mA mB mC UNC
id4 xA xB xC XD
这是我的代码:
df <- read.csv("file.csv", comment.char = "#", header = TRUE, sep = "\t")
#add the id as row name:
rownames(df) <- paste("id", 1:nrow(df), sep = "")
# eliminate some elements of the data frame
df[, 2:ncol(df)] <- NULL
# add a name of each column and split elements based in ";" character
#at this point the "df" has a single column named "old_name":
df <- df %>% tidyr::separate(old_name, c("col1", "col2", "col3", "col4"), sep = ";", extra="drop")
任何建议!!!
非常感谢
【问题讨论】:
-
根据您的代码,您有一个要拆分的列。在显示的数据中,有 4 列。哪个是正确的
-
请提供有效代码;您的
""col4是语法/解析错误。 (我知道我可以很容易地编辑它,但是......我不想掩盖你可能遇到但不知道的问题,也不想在我推断不正确时引入其他错误/差异。) -
dat[] <- lapply(dat, function(a) if (is.character(a)) replace(a, is.na(a), "UNC") else a)? -
很抱歉语法错误,它是 "col4" 而不是 ""col4 ... 非常感谢!
-
这不能直接工作吗?
df[is.na(df)] <- 'UNC'