为什么在使用列调用 `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 或更新版本。
这是我数据框中的数据格式
我希望我的数据框看起来像这样
这就是我想要做的
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 或更新版本。