提问人:Andrew Lord 提问时间:11/13/2023 最后编辑:Jon SpringAndrew Lord 更新时间:11/13/2023 访问量:22
根据索引中的 2 个条件为列中的数据分配类别的 R 公式
R formula to assign categories to data in a column based on 2 conditions in an index
问:
我在 Google 表格中有 2 张数据表。我想创建一个公式,根据第二张工作表中的信息将一张纸中的数据分为两类。我想找到一个解决方案,要么直接在工作表中使用公式,要么将其带入 R。
我尝试了几种方法来创建公式,但没有成功。
我也在 R 中尝试了几种不同的方法,但还没有找到解决方案。
我已经能够使用 Google sheets 4 库将数据从 google sheet 获取到 R 中。
进入 R 后,我将数据保存在两个对象中,“gs_dfId”和“gs_dfRunsheet”。
一张标有“gs_dfId”的工作表包含一个 Id 键,每个人都有一个数字。ID 号存储在标有“Id”的列中。第二张纸“gs_dfRunsheet”包含密钥中人员进行的交易历史记录。“gs_dfRunsheet”中有 3 列,“Id”列包含与 ID 表对应的每个人相同的 ID 号,“保留”列包含保留的金额,“已输送”列包含已输送的金额。如果某人进行的交易导致名为“Retained”的列中出现零,那么我希望在gs_dfID中添加一个新列,其中有两种颜色,“white”表示保留 0(零)的 Id,“blue”表示所有其他条目,包括空白单元格。可以将新的数据列添加到“gs_dfId”对象中的数据集中。
这是 2 个数据集和谷歌文档的链接。 https://docs.google.com/spreadsheets/d/1jnl-yvI4itmYPvYoggL9pNVHw2r4ktgd_kqBbI0mHow/edit#gid=0
运行表:
Grantor Retained Conveyed
1
2
3 0 1
4
5 0 1
6 1 1
7 0 0
7 0 0
6 0 1
10 0 0
8 0
9 0 0
11 ? ?
7 ? ?
7 0 0
11 0 0
8 0 1
10 0 0
13 0 0
13 0 1
13 0 1
15 0 1
10
16 0 1
18 0 1
19 0.25 LRI 1
20 0.25 LRI 1
20 0.25 LRI? 1
20 0.015625 RI 0.015625 RI
编号:
Id Color
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
如果运行表中的授予者保留零,那么我希望“颜色”列包含单词“白色”,如果它有除零之外的任何其他条目,包括空白单元格,我希望它具有“蓝色”
我尝试了三种不同的解决方案,但未能成功求解方程式。
首先,我尝试直接在谷歌表格中编写一个谷歌表格公式,以便在数据加载到 R 之前分配颜色。
=IF(AND(INDEX(Runsheet!B:B, MATCH(A2, Runsheet!A:A, 0)) = 0, A2 = INDEX(Runsheet!A:A, MATCH(A2, Runsheet!A:A, 0))), "white", "blue")
其次,我尝试使用带有 ifelse 设置的循环。
找到了这个问题和答案,但还没有弄清楚如何应用它: 在 R 中根据逻辑条件插入列
for (i in 1:nrow(gs_dfId)) {
# Get the value in column A of the current row in the first sheet
gs_dfId$Id <- gs_dfId[i, "A"]
# Check if there is a corresponding row with a zero in the second sheet
if (gs_dfId$Id %in% gs_dfRunsheet$Grantor && gs_dfRunsheet[gs_dfRunsheet$Grantor == gs_dfId$Id, "B"] == 0) {
# If the condition is met, assign "white" to the current row in column B of the first sheet
gs_dfId[i, "Color"] <- "white"
} else {
# Otherwise, assign "blue" to the current row in column B of the first sheet
gs_dfId[i, "Color"] <- "blue"
}
}
第三,我尝试使用tidyverse并设置一个管道。 我也找到了这个问题和答案,但还没有能够理解如何应用它: 在 r 的 data.table 中基于多个条件创建列
result <- gs_dfId %>%
left_join(gs_dfRunsheet %>% filter(Retained == 0), by = c("Id" = "Grantor")) %>%
mutate(Color = ifelse(!is.na(Retained.y), "white", "blue")) %>%
select(-Retained.y)
答: 暂无答案
评论