有关将数据文本字符串转换为数据框(例如 here )的类似问题。但是,我似乎无法使它们适应我的问题。
我有一串数据,我正在尝试将其转换为 4 列数据框。我设法使用 readr::read_table 函数解决了我的问题(如下所示)。但是,我尝试在基本 R 中执行此操作。我尝试使用基本 R 的 read.table
(为了清楚起见,它实际上是 utils::read.table
而不是base
...但我将其称为base R),但我似乎无法让它工作。
例如:
# text data
myText <- c("5 3 10\n3\n1 5 14 0.1005662213\n2 0 0 0.671371791\n3 0 0 0.3407034564\n3\n1 1 25 -0.5748688752\n2 0 0 -4.699291421\n3 0 0 -0.4393139217\n5\n1 5 35 0\n2 0 0 1.749283465\n3 0 67 0.1521562187\n6 0 0 -0.5545833321\n7 0 0 3.083556757\n1\n1 0 0 0.1563740906\n3\n1 1 25 -0.5748688752\n2 0 0 -4.352982824\n3 0 0 -0.05197710951\n5\n1 5 35 0\n2 0 0 2.425573501\n3 0 67 0.1521562187\n6 0 0 0.2505656058\n7 0 0 3.46201086\n3\n1 0 70 0.1563740906\n2 0 0 -0.8389369233\n3 0 0 -0.8127210366\n3\n1 1 25 -0.5748688752\n2 0 0 -4.125099073\n3 0 0 0.441967459\n5\n1 5 35 0\n2 0 0 1.337439399\n3 0 67 0.1521562187\n6 0 0 -0.03812773992\n7 0 0 2.488268982\n5\n1 0 70 0.1563740906\n2 0 0 -0.3505144781\n3 3 12 -0.8127210366\n6 0 0 -4.823541056\n7 0 0 1.200961188\n3\n1 1 25 -0.5748688752\n2 0 0 -4.615762984\n3 0 0 0.3397146156\n3\n1 5 35 0\n2 0 0 0.721465764\n3 0 0 0.4643481329\n5\n1 0 70 0.1563740906\n2 0 0 -1.004169113\n3 3 12 -0.8127210366\n6 0 0 -2.918580322\n7 0 0 2.114195803\n3\n1 1 25 -0.5748688752\n2 0 0 -4.894243443\n3 0 0 0.2303526511\n3\n1 5 35 0\n2 0 0 1.841081293\n3 0 0 1.204413054\n")
# turn into df using readr
df <- suppressWarnings(
readr::read_table(
file = myText,
col_names = c("idNum", "varNum", "val1", "val2"),
skip = 1,
na = c("")
)
)
> df
# A tibble: 68 × 4
idNum varNum val1 val2
<dbl> <dbl> <dbl> <dbl>
1 3 NA NA NA
2 1 5 14 0.101
3 2 0 0 0.671
4 3 0 0 0.341
5 3 NA NA NA
6 1 1 25 -0.575
7 2 0 0 -4.70
8 3 0 0 -0.439
9 5 NA NA NA
10 1 5 35 0
# … with 58 more rows
如您所见,我已将字符串转换为 4 列数据框(在本例中为 tibble)。但我试图避免使用任何额外的包并使用基本 R 来实现这一点。
我尝试从基础 R 读取read.table
,但它给出了一个错误:
dfNew <- read.table(file = myText,
col.names = c("idNum", "varNum", "val1", "val2"),
skip = 1,
na.strings = "NA")
> dfNew
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open file '5 3 10
我不知道如何解决该错误。附加警告似乎还表明它在读取数据之前不会跳过任何行。
关于如何解决这个问题有什么建议吗?
最佳答案
当您从字符向量读取时,请使用 text
参数而不是 file
。此外,由于并非所有行都包含 4 个值,因此使用 fill=NA
使用 NA
填充缺失值:
df <- read.table(text = myText, skip = 1, fill = NA, col.names = c("idNum", "varNum", "val1", "val2"))
head(df)
#> idNum varNum val1 val2
#> 1 3 NA NA NA
#> 2 1 5 14 0.1005662
#> 3 2 0 0 0.6713718
#> 4 3 0 0 0.3407035
#> 5 3 NA NA NA
#> 6 1 1 25 -0.5748689
关于r - 如何在R中将文本数据转换为数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73602093/