我已经通过read.csv
读取了R中的数据集,并且在做了一些计算之后创建了以下10个相似名称的变量,PI_1,PI_2,.....,PI_10
现在我将新形成的变量与现有数据集(TempData)合并。
x<-cbind(TempData,PI_1,PI_2,PI_3,PI_4,PI_5,PI_6,PI_7,PI_8,PI_9,PI_10)
有没有更聪明的方法(可能通过循环)。非常感谢任何帮助
答案 0 :(得分:1)
假设文件位于工作目录中,并且所有文件都以PI_
开头,后跟一些数字\\d+
,我们可以使用带有list.files
参数的pattern
以防万一目录中还有其他文件。要检查工作目录,请使用getwd()
files <- list.files(pattern='^PI_\\d+')
这将给出文件名。现在,我们可以使用lapply
并使用list
在read.table
中阅读这些文件。有一次,我们完成了该部分,使用do.call(cbind
将所有数据集列绑定在一起。
res <- do.call(cbind,lapply(files, function(x)
read.table(x, header=TRUE)))
我想您需要根据某些10
创建PI
个变量。在注释中提供的代码中,PI
似乎是一个在其中具有一定价值的对象。在这里,我创建PI
作为值,因为它不清楚。我创建了一个虚拟数据集。
TempData[paste0('PI_', 1:10)] <- Map(function(x,y) c('', 'PI')[(x==y)+1],
1:10, list(TempData$Concept))
head(TempData,3)
# Concept Val PI_1 PI_2 PI_3 PI_4 PI_5 PI_6 PI_7 PI_8 PI_9 PI_10
#1 10 -0.4304691 PI
#2 10 -0.2572694 PI
#3 3 -1.7631631 PI
您可以使用write.table
保存结果
set.seed(42)
dat <- data.frame(Concept=sample(1:10,50, replace=TRUE), Val=rnorm(50))
write.csv(dat, 'Concept.csv', row.names=FALSE,quote=FALSE)
TempData <- read.csv('Concept.csv')
str(TempData)
#'data.frame': 50 obs. of 2 variables:
# $ Concept: int 10 10 3 9 7 6 8 2 7 8 ...
# $ Val : num -0.43 -0.257 -1.763 0.46 -0.64 ...