gpt4 book ai didi

r - 将列中的独特特征转换为变量名称并将原始特征虚拟编码为 R 中的变量

转载 作者:行者123 更新时间:2023-12-04 19:05:02 24 4
gpt4 key购买 nike

如何对以下数据集进行虚拟编码存在问题。

示例数据,假设 dataframe = mydata:

ID |     NAMES      |
-- | -------------- |
1 | 4444, 333, 456 |
2 | 333 |
3 | 456, 765 |

我只想将 NAMES 中的唯一变量转换为列变量和代码,如果每一行都有该变量,即 1 或 0

期望输出:
ID |     NAMES      | 4444 | 333 | 456 | 765 |
-- | -------------- |------|-----|-----|-----|
1 | 4444, 333, 456 | 1 | 1 | 1 | 0 |
2 | 333 | 0 | 1 | 0 | 0 |
3 | 456, 765 | 0 | 0 | 1 | 1 |

到目前为止我所做的是创建了一个独特的向量
split <- str_split(string = mydata$NAMES,pattern = ",")

vec <- unique(str_trim(unlist(split)))
remove <- ""
vec <- as.data.frame(vec[! vec %in% remove])
colnames(vec) <- "var"
vecRef <- as.vector(vec$var)

namesCast <- dcast(data = vec,formula = .~var)
namesCast <- nameCast[,2:ncol(namesCast)]

这产生了一个唯一的 NAMES 向量,其中删除了空格/不规则性。从那里我不知道如何进行匹配/虚拟编码,因此将不胜感激!

最佳答案

您可以使用我的“splitstackshape”包中的 cSplit_e,如下所示:

library(splitstackshape)
cSplit_e(mydata, "NAMES", sep = ",", type = "character", fill = 0)
# ID NAMES NAMES_333 NAMES_4444 NAMES_456 NAMES_765
# 1 1 4444, 333, 456 1 1 1 0
# 2 2 333 1 0 0 0
# 3 3 456, 765 0 0 1 1

如果您想查看使用这些参数时调用的底层函数,可以查看 splitstackshape:::charMat ,它采用 list 生成的 strsplit 并从中创建 matrix

直接调用函数会给你这样的东西:
splitstackshape:::charMat(
lapply(strsplit(as.character(mydata$NAMES), ","),
function(x) gsub("^\\s+|\\s$", "", x)))
# 333 4444 456 765
# [1,] 1 1 1 NA
# [2,] 1 NA NA NA
# [3,] NA NA 1 1

关于r - 将列中的独特特征转换为变量名称并将原始特征虚拟编码为 R 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27275022/

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