【发布时间】:2015-10-14 03:35:52
【问题描述】:
我面临以下问题。
我有一个大数据集,我使用split 使数据更易于访问。我最终得到了大约 250 次分裂。因此,每个拆分都被命名为“二进制代码+原始名称”。有没有办法不用r自动添加二进制代码来写新的数据集?
下面是一个可重现的例子:
df_NA <- data.frame(Size= c(800, 850, NA, 1200, NA),
Price = c(900, NA, 1300, 1100, 1200),
Location = c(NA, 'Downtown', 'Uptown', NA, 'Lakeview'),
Rooms = c(1, 2, NA, 4, NA),
Bathrooms = c(1, 2, 1, 2, 2),
Rent = c('Yes', 'Yes', 'No','Yes', 'No'))
下面我拆分数据(最终得到三个不同的集合),将它们写入我的Splits 文件夹,然后删除空列并将它们写入我的Updated Splits 文件夹。
# Splitting
index <- apply(is.na(df_NA)*1, 1,paste, collapse = "")
s <- split(df_NA, index)
# Writing splits into csv files and removing empty columns
for (i in 1:length(s))
{
write.csv(s[i], file = paste0("Splits/", i, "splits.csv"),
row.names=FALSE, na = "")
sdf <- data.frame(s[i])
updated_split <- sdf[,colSums(is.na(sdf))<nrow(sdf)]
write.csv(updated_split, file = paste0("Updated Splits/","updated", i, "split.csv"), row.names=FALSE)
}
现在,当我打开三个文件中的一个随机文件时,我得到了这个:
data <- read.csv("Updated Splits/updated1split.csv")
data
X001000.Size X001000.Price X001000.Rooms X001000.Bathrooms X001000.Rent
1 800 900 1 1 Yes
2 1200 1100 4 2 Yes
我尝试了col.names=F,但它并没有改变任何东西。知道如何绕过它吗?也许有一种方法可以在我写入文件后删除所有二进制名称?
【问题讨论】:
-
您正在使用列表。你需要
s[[ii]]而不是s[ii]。 -
@Pascal 我不确定我理解你的意思。你能写一个例子吗?
-
@akrun 我担心文件本身。我只是为了方便才输出的。
-
好吧,我误解了这个问题。看起来@pascal 的答案就是你想要的
-
您可以将名称设置为 NULL,即
s <- setNames(split(df_NA, index), NULL),然后继续。
标签: r split binary multiple-columns