Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于r中的NA值对实例进行分组_R_File_Csv_Instance_Na - Fatal编程技术网

基于r中的NA值对实例进行分组

基于r中的NA值对实例进行分组,r,file,csv,instance,na,R,File,Csv,Instance,Na,我正在读取一个csv文件,不幸的是,我的数据帧有许多缺失值。小剪报如下: df <- data.frame(Size= c(800, 850, 1100, 1200, 1000), Value= c(900, NA, 1300, 1100, NA), Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'), Num1 = c(2, NA,

我正在读取一个
csv
文件,不幸的是,我的数据帧有许多缺失值。小剪报如下:

df <- data.frame(Size= c(800, 850, 1100, 1200, 1000), 
                 Value= c(900, NA, 1300, 1100, NA),
                 Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'),
                 Num1 = c(2, NA, 3, 2, NA),
                 Num2 = c(2,3,3,1,2),
                 Rent= c('y', 'y', 'n', 'y', 'n'))

但它将所有的拆分都写在一行中。有没有办法用线把它们分开

编辑3:

我的步骤是:

data <- read.csv("location")
index <- apply(is.na(data)*1, 1,paste, collapse = "")
s <- split(data, index)
lapply(s, function(x) {names(x) <- names(data);x})
big.data <- do.call(rbind, s)
write.csv(big.data, file = "location", row.names=FALSE)
数据
将来,请创建一个可复制的示例,这样用户就不必根据您的问题手动创建数据框。图片没有那么有用

资料 使用for循环:

s <- split(temp, index)
for (i in 1:length(s)) {
  write.csv(s[i], file = paste0("C:/Users/Nikita/Desktop/", i, "splits.csv"), row.names=FALSE)
}

s重新创建示例数据:

df <- data.frame(Size= c(800, 850, 1100, 1200, 1000), 
                 Value= c(900, NA, 1300, 1100, NA),
                 Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'),
                 Num1 = c(2, NA, 3, 2, NA),
                 Num2 = c(2,3,3,1,2),
                 Rent= c('y', 'y', 'n', 'y', 'n'))

df请解释好您的问题,如果可能,请添加一个可复制的示例或至少一个所需的输出。帮助用户帮助您。问题不清楚谢谢您的回答和提供的代码!它只保存第一次拆分。我需要使用循环还是做错了什么?我忘了有一个文件被输入函数。因此,它将尝试将所有拆分写入该文件。尝试一个for循环。我再次编辑了我的答案。效果很好!谢谢。lol用户。我用大于和小于符号告诉您输入数据帧的名称。不要把它放进去。例如,如果包含所需所有列名的原始数据框被称为“mydf”。您将输入
lappy(s,函数(x){names(x)它工作得很好。谢谢!另一个简单的问题。这是我数据的一小部分。我的整个数据框由244个属性组成。有没有方法可以自动将结果输出到一个文件中?@User你可以将所有结果保存在一个对象
结果谢谢!我使用了plafort的方法,因为他回答了我的问题请回答一个简单的问题:有没有办法用原始列名保存文件,或者每个列都必须包含组合号?
df[is.na(df$Value), ]
  Size Value Location Num1 Num2 Rent
2  850    NA  midcity   NA    3    y
5 1000    NA Lakeview   NA    2    n
df <- data.frame(Size= c(800, 850, 1100, 1200, 1000), 
                 Value= c(900, NA, 1300, 1100, NA),
                 Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'),
                 Num1 = c(2, NA, 3, 2, NA),
                 Num2 = c(2,3,3,1,2),
                 Rent= c('y', 'y', 'n', 'y', 'n'))
lapply(split(temp, index), write.csv, file = "C:/Users/Nikita/Desktop/splits.csv", row.names=FALSE)
s <- split(temp, index)
for (i in 1:length(s)) {
  write.csv(s[i], file = paste0("C:/Users/Nikita/Desktop/", i, "splits.csv"), row.names=FALSE)
}
df <- data.frame(Size= c(800, 850, 1100, 1200, 1000), 
                 Value= c(900, NA, 1300, 1100, NA),
                 Location= c(NA, 'midcity', 'uptown', NA, 'Lakeview'),
                 Num1 = c(2, NA, 3, 2, NA),
                 Num2 = c(2,3,3,1,2),
                 Rent= c('y', 'y', 'n', 'y', 'n'))
# This generates an index with 1 for a column with NA and 0 otherwise
index <- apply(is.na(df)*1, 1,paste, collapse = "")

# This splits the data.frame according to the index
split(df, index)
$`000000`
  Size Value Location Num1 Num2 Rent
3 1100  1300   uptown    3    3    n

$`001000`
  Size Value Location Num1 Num2 Rent
1  800   900     <NA>    2    2    y
4 1200  1100     <NA>    2    1    y

$`010100`
  Size Value Location Num1 Num2 Rent
2  850    NA  midcity   NA    3    y
5 1000    NA Lakeview   NA    2    n