gpt4 book ai didi

r - 根据R中特定字符分隔的行中的数据创建新列

转载 作者:行者123 更新时间:2023-12-05 03:27:29 27 4
gpt4 key购买 nike

我有下表

<表类="s-表"><头>拥有者宠物住房类型<正文>一个猫;狗;兔3B狗;兔2C猫2D猫;兔子3E猫;鱼1

代码如下:

Data_Pets = structure(list(Owner = structure(1:5, .Label = c("A", "B", "C", "D",
"E"), class = "factor"), Pets = structure(c(2L, 5L, 1L,4L, 3L), .Label = c("Cats ",
"Cats;Dog;Rabbit", "Cats;Fish","Cats;Rabbit", "Dog;Rabbit"), class = "factor"),
House_Type = c(3L,2L, 2L, 3L, 1L)), class = "data.frame", row.names = c(NA, -5L))

谁能告诉我如何根据 Pet 列中的数据创建新列,方法是为每只动物创建一个新列,用 ; 分隔看起来像下表?

<表类="s-表"><头>拥有者猫狗兔子鱼住房类型<正文>一个是是是N3BN是是N2CN是NN2D是N是N3E是NN是1

谢谢!

最佳答案

一种方法是定义一个匹配特定动物的辅助函数,然后将列绑定(bind)到原始框架。

请注意,进行了一些争论以去除空格以识别要查询的独特动物。

f <- Vectorize(function(string, match) {
ifelse(grepl(match, string), "Y", "N")
}, c("match"))

df %>%
bind_cols(
f(df$Pets, unique(unlist(strsplit(trimws(as.character(df$Pets)), ";"))))
)

Owner Pets House_Type Cats Dog Rabbit Fish
1 A Cats;Dog;Rabbit 3 Y Y Y N
2 B Dog;Rabbit 2 N Y Y N
3 C Cats 2 Y N N N
4 D Cats;Rabbit 3 Y N Y N
5 E Cats;Fish 1 Y N N Y

或者更一般化,如果您不确定分隔符是 ;,并且存在空格,则 stringi 很有用:

dplyr::bind_cols(
df,
f(df$Pets, unique(unlist(stringi::stri_extract_all_words(df$Pets))))
)

关于r - 根据R中特定字符分隔的行中的数据创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71478316/

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