我有一个包含不同列数的数据框(取决于我有更少或更多数据点的年份)。最初这是一个横截面时间序列长数据集,而不是一个广泛的数据集,但我需要从中提取每年的向量(我想创建国家表)。
如果我有较少的数据点(这意味着某些结束列具有NA-s),R将NA
放在行的末尾。
但是我想在不喜欢NA
的Python代码中使用每一行作为输入向量。所以我想用空单元替换NA
s。拥有不同长度的矢量是理想的。用零替换NA
s也不起作用,因为我想跟踪不同年份的不同行大小。我找到了人物的答案,但我有数字,任何帮助将不胜感激。
目标是编写一个没有NA-s的表或csv文件,因为我想在python代码中传递每一行。
谢谢!
mat1 <- matrix(c(3,0, 1, 13, NA, NA,NA, 3, 0, 1, 13,
NA, NA, NA, 3, 0 ,1 ,16, NA, NA, NA,
3,0, 1, 16, NA, NA, NA, 0, 0, 134, 33, 39, 1, 14,
0,0, 134, 33, 39, 1, 14),7,6)
print(t(mat1))
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 3 0 1 13 NA NA NA
[2,] 3 0 1 13 NA NA NA
[3,] 3 0 1 16 NA NA NA
[4,] 3 0 1 16 NA NA NA
[5,] 0 0 134 33 39 1 14
[6,] 0 0 134 33 39 1 14
作为data.frame:
> print(as.data.frame(t(mat1)))
> V1 V2 V3 V4 V5 V6 V7
> 1 3 0 1 13 NA NA NA
> 2 3 0 1 13 NA NA NA
> 3 3 0 1 16 NA NA NA
> 4 3 0 1 16 NA NA NA
> 5 0 0 134 33 39 1 14
> 6 0 0 134 33 39 1 14
答案 0 :(得分:5)
根据您将行传递给Python代码的方式,有多种方法可以处理这些,但它们都不对应于&#34;清空单元格&#34; - NA
值已经(可以说)是编码R中矩形数组中空单元格的最佳/最明智的方法。
mat1 <- matrix(c(3,0, 1, 13, NA, NA,NA, 3, 0, 1, 13,
NA, NA, NA, 3, 0 ,1 ,16, NA, NA, NA,
3,0, 1, 16, NA, NA, NA, 0, 0, 134, 33, 39, 1, 14,
0,0, 134, 33, 39, 1, 14),nrow=7,ncol=6)
mat2 <- t(mat1) ## see below
## Your text description says that `NA` values come at the end
## of *rows*, but your matrix has `NA` values at the end of
## *columns*, so I've transposed the matrix.
因为你声明的目标是
写一个没有NA-s的表或csv文件
正确答案(正如现已删除的评论所示)是使用write.csv(...,na="")
:来自?write.csv
,
na:用于数据中缺失值的字符串。
更一般地说,如果您想一次将一行传递给Python,您可以使用以下策略之一:
na.omit()
删除NA
值:for (i in 1:nrow(mat2))
call_my_python_code(na.omit(mat2[i,]))
或
apply(mat2,1,function(x) call_my_python_code(na.omit(x))
NA
值):my_list <- split(mat2,row(mat2))
my_list <- lapply(my_list,na.omit)
lapply(my_list,call_my_python_code)
plyr
或dplyr
工具对块进行操作... library(reshape2)
mat3 <- na.omit(melt(mat2))
mat3[mat3$Var1==1,] ## row 1
library(plyr)
dlply(mat3,"Var1",function(x) call_my_python_code(x$value))