gpt4 book ai didi

r - 将具有不同数量值的大字符列拆分为多列

转载 作者:行者123 更新时间:2023-12-03 19:02:10 26 4
gpt4 key购买 nike

我有一个字符列,每行的值数量不同。这只是一个小例子:

GoodForMeal %>% head(5)
# A tibble: 5 x 1
GoodForMeal
<chr>
1 dessert': False, 'latenight': False, 'lunch': True, 'dinner': True
2 dessert': False, 'latenight': False, 'lunch': True, 'dinner': True
3 <NA>
4 dessert': False, 'latenight': False, 'lunch': True, 'dinner': True
5 dessert': False, 'latenight': False, 'lunch': True, 'dinner': True

这是列第一行的dput():

structure(list(GoodForMeal = "dessert': False, 'latenight': False, 'lunch': True, 'dinner': True, 'breakfast': False, 'brunch': False}"), .Names = "GoodForMeal", row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

我想将冒号前的值指定为列名,将冒号后的值指定为相应列的值。

例子:

   desert latenight lunch diner 
1 False False True True
2 False False True True
3 NA NA NA NA
4 False False True True
5 False False True True

我尝试使用 tidyr packadge 和 separate 以及 spread 函数:

separate(GoodForMeal, c("key", "value"), sep = ":", extra = "merge") %>% spread(key, value)

问题是 r 不是拆分冒号前的所有值,而是拆分第一个值。

所以结果是这样的:

GoodForMeal %>% str()

Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4464 obs. of 2 variables:
$ dessert': chr " False, 'latenight': False, 'lunch': True, 'dinner': False, 'breakfast': False, 'brunch': False}" " False, 'latenight': False, 'lunch': True, 'dinner': True, 'breakfast': False, 'brunch': False}" " False, 'latenight': False, 'lunch': False, 'dinner': False, 'breakfast': False, 'brunch': False}" " False, 'latenight': False, 'lunch': True, 'dinner': True, 'breakfast': False, 'brunch': False}" ...
$ <NA> : chr NA NA NA NA ...

知道如何拆分值以使其看起来像示例中的那样吗?谢谢

最佳答案

使用您提供的测试数据,我会首先使用 mutate 来删除 ': 等字符列,以及用餐时​​间关键字。这使您可以使用分隔不同用餐时间的逗号进行拆分。下面是一个例子:

df <- structure(list(GoodForMeal = "dessert': False, 'latenight': False, 'lunch': True, 'dinner': True, 'breakfast': False, 'brunch': False}"),
.Names = "GoodForMeal", row.names = c(NA, -1L),
class = c("tbl_df", "tbl", "data.frame"))

df %>%
mutate(GoodForMeal = trimws(gsub("[':]|dessert|lunch|dinner|latenight|brunch",
"",
GoodForMeal))) %>%
separate(GoodForMeal,
c("dessert", "latenight", "lunch", "dinner"),
", ",
extra="drop")

它应该产生:

# A tibble: 1 x 4
# dessert latenight lunch dinner
# * <chr> <chr> <chr> <chr>
# False False True True

我希望这证明是有用的。

关于r - 将具有不同数量值的大字符列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com