以下是我的文本文件的摘录:
df1:
Index Team 1 Team 2 Team1_Score Team2_Score
0 A B 25 56
1 B C 30 55
2 D E 35 75
df2:
Index Team 1 Team 2 Team1_Avg Team2_Avg
0 A B 5 15
1 G F 10 25
2 C B 15 35
dfcombined
Index Team 1 Team 2 Team1_Score Team2_Score Team2_Avg Team1_Avg
0 A B 25 56 5 15
1 B C 30 55 35 15
2 D E 35 75
我想将此文件读入包含4列的数据框中。看起来应该是这样的:
Assets
Notes
2017
2016
Cash
6
12,000,000
11,000,000
我正在考虑循环读取每四个观察一行的新行,但看起来它不是将文件读入R的最有效方法。任何建议?
答案 0 :(得分:3)
1)base 将Lines
读入角色向量L
。在注释的底部,我们可以重复显示Lines
,但您可以使用注释掉的行替换读取它的行,并相应地更改文件名。
接下来删除逗号并将其重新整形为n x 4矩阵m
。然后将行折叠为字符串向量L2
,并使用read.table
读取。
没有使用任何包裹。
# L <- readLines("myfile")
L <- readLines(textConnection(Lines))
m <- matrix(gsub(",", "", L),, 4, byrow = TRUE)
L2 <- apply(m, 1, paste, collapse = " ")
read.table(text = L2, header = TRUE, check.names = FALSE, as.is = TRUE)
,并提供:
Assets Notes 2017 2016
1 Cash 6 12000000 11000000
2)dplyr / tidyr 使用(1)中的L
,我们创建一个带有列名(使用回收)和内容的两列数据框,然后将其展开为宽格式。
library(dplyr)
library(tidyr)
L %>%
{ data.frame(Name = factor(.[1:4], levels = .[1:4]),
Contents = gsub(",", "", .[-(1:4)])) } %>%
spread(Name, Contents, convert = TRUE)
Lines <- "Assets
Notes
2017
2016
Cash
6
12,000,000
11,000,000"
答案 1 :(得分:1)
data <- structure(list(V1 = c("Assets", "Notes", "2017", "2016", "Cash",
"6", "12,000,000", "11,000,000")), .Names = "V1", class = "data.frame", row.names = c(NA,-8L))
data.frame(matrix(unlist(data), ncol = 4, byrow = T))