为什么在使用列调用 `separate` 函数时出现错误?

Why am I getting an error when calling the `separate` function with a column?

这是我数据框中的数据格式

我希望我的数据框看起来像这样

这就是我想要做的

library(dplyr)
library(tidyr)
library(stringr)

separate(data1, col = data1$Description, into = c("Location","ID","Date"),sep = ':')

这是我遇到的错误 错误:必须提取具有单个有效下标的列。 x 下标 var 大小为 10 但必须大小为 1。运行 rlang::last_error() 查看错误发生的位置。

如评论中所述,问题与您引用 Description 专栏的方式有关。

参见:

df <- data.frame(
  Description = c("location1:52:2018-10-20", "location2:59:2018-14-24")
)
# working
tidyr::separate(df, col = Description, into = c("Location", "ID", "Date"), sep = ":")
#>    Location ID       Date
#> 1 location1 52 2018-10-20
#> 2 location2 59 2018-14-24
tidyr::separate(df, col = "Description", into = c("Location", "ID", "Date"), sep = ":")
#>    Location ID       Date
#> 1 location1 52 2018-10-20
#> 2 location2 59 2018-14-24
tidyr::separate(df, col = 1, into = c("Location", "ID", "Date"), sep = ":")
#>    Location ID       Date
#> 1 location1 52 2018-10-20
#> 2 location2 59 2018-14-24

# not working
tidyr::separate(df, col = df$Description, into = c("Location", "ID", "Date"), sep = ":")
#> Error: Must extract column with a single valid subscript.
#> x Subscript `var` has size 2 but must be size 1.

reprex package (v2.0.0)

于 2021-08-19 创建

如果您也对 base R 解决方案感兴趣,您可以试试这个 :

data1 <- data.frame(Description = c("location1:48:2018-10-23", "location2:83:2018-01-05"), Temp = c(-0.9381736, 1.1714643))
data1
#              Description   Temp
# 1 location1:48:2018-10-23 -0.9381736
# 2 location2:83:2018-01-05  1.1714643
data2 <- data1$Description|> strsplit(":") |> sapply(c) |> t() |> as.data.frame() |> cbind(data1$Temp)
colnames(data2) <- c('Location', 'ID', 'Date', 'Temp')

data2
#    Location ID       Date       Temp
# 1 location1 48 2018-10-23 -0.9381736
# 2 location2 83 2018-01-05  1.1714643

请注意,原生管道 |> 仅适用于 R 4.1.0 或更新版本。