r - 如何在R中将文本数据转换为数据框?

标签 r

有关将数据文本字符串转换为数据框(例如 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/

相关文章:

r - 如何覆盖导入中列出的 R 包中的导出函数

r - 如何通过 ggplot2-autoplot 放大时间序列数据

r - 使用xts作为查找表

r - 将回归系数存储在 R data.table 中

r - 如何使用 write.xlsx 对 R 中创建的 Excel 文件进行密码保护?

r - 使用 data.table 查找重叠间隔组

r - 为什么我在 na.fail.default(list(doc.class = c(3L, 1L...对象中缺少值) 中出现错误

R图质量

R - 时间序列每小时

python - 如何使用pandas创建组ID