gpt4 book ai didi

r - 输出时忽略重复条目的子集基函数

转载 作者:行者123 更新时间:2023-12-04 14:43:42 24 4
gpt4 key购买 nike

我最近询问如何使用字典文件对数据集中的值进行重新编码 (Working with data values (dictionary). dataframes and recoding in R)

我遇到了一个更简单的问题,但该修复不起作用。假设我有以下数据集,每一行都是一个地理单位,V1 列列出了地理包找到的“第一个邻居”,但使用行号列出它 :

V1 <- c(1, 2, 1)
id <- c(110001, 110002, 110003)
dataset <- as.data.frame(matrix(c(id, V1), ncol=2))
colnames(dataset) <- c("id", "V1")

所以在这个数据集上,区域 110001 是它自己的邻居(V1 = 1),区域 110003 是 110001 的邻居(V1 = 1)。现在,我不想将 V1(第一个邻居)显示为 "1, 2, 1",而是希望它是地理区域的 id "110001, 110002, 110001".

所以,我创建了一个“字典”文件,其中包含地理区域的行号和 id:

dictionary <- as.data.frame(matrix(c(dataset$id, 1:nrow(dataset)),ncol=2))
colnames(dictionary) <- c("id","row")

然后,我尝试使用 mutate 映射这些。请注意,我有许多邻域变量(V1-V30),而我在示例中只使用了一个,所以我将使用转换为所有的语法:

new_dataset <- dataset %>% mutate(across(starts_with("V"), ~subset(dictionary, row == cur_column(), select= id)))     

这应该做的是:跨列运行,将值与字典行中的值进行比较,然后返回适当的 id。似乎问题在于 dataset$V1 中的重复条目(在此示例中,第 1 行和第 3 行等于“1”)。如果我逐行进行,这将起作用:

first_row <- dataset[1,] %>% mutate(V1 = subset(dictionary, row == V1, select= id))    
second_row <- dataset[2,] %>% mutate(V1 = subset(dictionary, row == V1, select= id))
third_row <- dataset[3,] %>% mutate(V1 = subset(dictionary, row == V1, select= id))

我的印象是“子集”忽略了重复的条目。例如,如果我运行这个:

 subset(dictionary, row == dataset$V1, select= id)

应该返回"110001, 110002, 110001",但只返回"110001, 110002"

关于如何让子集返回所有内容或其他方法的任何想法?

最佳答案

我们可以使用rowwise

library(dplyr)
dataset %>%
rowwise %>%
mutate(V1 = subset(dictionary, row == V1, select= id)$id) %>%
ungroup

-输出

# A tibble: 3 x 2
id V1
<dbl> <dbl>
1 110001 110001
2 110002 110002
3 110003 110001

或者用 data.table

library(data.table)
setDT(dataset)[dictionary, V1 := i.id, on = .(V1 = row)]
> dataset
id V1
1: 110001 110001
2: 110002 110002
3: 110003 110001

如果有多个列,例如“V1”、“V2”等

dataset$V2 <- V1[c(1, 3, 2)]
nm1 <- paste0("V", 1:2)
setDT(dataset)
for(nm in nm1)
dataset[dictionary, (nm) := i.id, on = setNames("row", nm)][]

-输出

> dataset
id V1 V2
1: 110001 110001 110001
2: 110002 110002 110001
3: 110003 110001 110002

关于r - 输出时忽略重复条目的子集基函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68764921/

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