我没有太多的经验与R和希望在修改矩阵或 Dataframe 一些帮助。我有一个csv文件,看起来如下:
| | 米1|平方米|立方米|平方米|五月|
| - ------|- ------|- ------|- ------|- ------|- ------|
| c1|1个|无|不适用|1个|无|
| c2|无|无|1个|1个|不适用|
| c3|1个|1个|1个|1个|1个|
| 四碳|无|1个|无|不适用|1个|
我使用以下代码将csv文件读入矩阵:
data <- read.csv(‘file.csv’, sep=“\t”, stringsAsFactors = F,head = T, row.names = 1)`enter code here`
data <- as.matrix(data)
str(data)
执行str(data)
后,我得到以下输出:
int [1:4, 1:5] 1 0 1 NA 1 0 ...
- attr(*, “dimnames”)=List of 2
..$ : chr [1:4] “c1” “c2" “c3” “c4" ...
..$ : chr [1:5] “m1” “m2" “m3” “m4" ...
在阅读csv之后,我想要得到一个矩阵或 Dataframe (无论哪一个都可以很容易地保存到Rdata中),其中每行作为一个单独的列表,每行的列值作为行列表中的一个列表。
List of 4
$ 1st list: int[1, 1:5] 1 0 NA ...
..-attr(*, "dimnames")=List of 2
.. ..$ : chr [1] “c1”
.. ..$ : chr [1:5] “m1” “m2" “m3” “m4" ...
$ 2nd list: int[1, 1:5] 1 0 NA ...
..-attr(*, "dimnames")=List of 2
.. ..$ : chr [1] “c1”
.. ..$ : chr [1:5] “m1” “m2" “m3” “m4" ...
$ 3rd list: int[1, 1:5] 1 0 NA ...
..-attr(*, "dimnames")=List of 2
.. ..$ : chr [1] “c1”
.. ..$ : chr [1:5] “m1” “m2" “m3” “m4" ...
$ 4th list: int[1, 1:5] 1 0 NA ...
..-attr(*, "dimnames")=List of 2
.. ..$ : chr [1] “c1”
.. ..$ : chr [1:5] “m1” “m2" “m3” “m4" ...
我知道有很多方法可以得到这个。它可以是在阅读csv的时候,也可以是在将它转换成矩阵并基于行索引创建嵌套列表之后。如果我能用基于行索引的第二种方法得到它,那将非常有帮助。我想将输出的4个列表保存到最终矩阵或 Dataframe 的RData中。
编辑:包括解决方案
我可以使用下面的代码将 Dataframe 拆分为每一行,如@user20650所建议的:
data_new <- split.data.frame(data, row.names(data))
这创建了4个列表,就像我想要的那样。我还发现,如果我们想将 Dataframe 拆分成所需的行数,我们可以使用列索引来实现。最后,我们可以将拆分后的 Dataframe 合并成一个 Dataframe 作为列表,并获得类似的输出。以下是代码:
data_frame_1 <- data[1:2,]
data_frame_2 <- data[3:4,]
df_list <- list("T1" = data_frame_1,"T2" = data_frame_2)
最终的 Dataframe df_list str(df_list)
如下所示:
List of 2
$ T1: int [1:2, 1:5] 1 0 NA 1 0 1 0 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:2] "c1" "c2"
.. ..$ : chr [1:6] "m1" "m2" "m3" "m4" ...
$ T2: int [1:2, 1:5] 1 0 1 NA 0 1 0 1 NA 1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:2] "c3" "c4"
.. ..$ : chr [1:6] "m1" "m2" "m3" "m4" ...
2条答案
按热度按时间ar7v8xwq1#
您可能希望使用
drop=FALSE
来防止单行自动强制为向量。mrfwxfqh2#
下面是从 Dataframe 创建列表列表的代码: