样品
fileABC=data.frame("id" = c(1:10),
"var1" = c("5*",8,1,4,"3*",5,6,7,"7*",1),
"var2" = c(7,4,6,"1*","8*",2,0,7,"0*",1))
fileQWE=data.frame("id" = c(1:10),
"var1" = c(7,"5*",8,1,4,"3*",5,"7*",6,2),
"var2" = c("8*",2,0,7,7,4,6,"1*","0*",1))
var1=c(fileABC$var1,fileQWE$var1)
var2=c(fileABC$var2,fileQWE$var2)
WANT = data.frame("id"=c(1:10,1:10)
"var1"=var1,
"var2"=var2,
"source"=c(rep("fileABC",10), rep("fileQWE",10)))
我有fileABC和fileQWE。首先,这些文件包含我要消除的随机*。其次,我想读入R中的两个文件,并将它们另存为fileABC和fileQWE。然后,我想创建数据帧WANT,该数据帧将两个文件中的var1和两个文件中的var2组合在一起,并根据其来源,使新变量“ source”等于fileABC或fileQWE。我进行了尝试,但是您可以运行并看到它不起作用。
我们可以使用bind_rows
并获取用parse_number
library(tidyverse)
bind_rows(lst(fileABC, fileQWE), .id = 'source') %>%
mutate_at(vars(starts_with("var")),
list(~ readr::parse_number(as.character(.))))
或使用 base R
lst1 <- mget(ls(pattern = "^file"))
out <- do.call(rbind, Map(cbind, lst1, source = names(lst1)))
row.names(out) <- NULL
out[2:3] <- lapply(out[2:3], function(x) as.numeric(sub("*", "", x, fixed = TRUE)))
如果我们想直接从.csv
文件读取(假设文件在工作目录中)
files <- list.files(pattern = ".csv")
names(files) <- str_remove(files, "\\.csv")
library(readr)
imap_dfr(files, ~ read.csv(.x) %>%
mutate_at(vars(starts_with("var")),
list(~ readr::parse_number(.))) %>%
mutate(source = .y))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句