【问题标题】:Lists or vectors within a column of a data frame, to be able to compare each value and count the matches with R project数据框列中的列表或向量,以便能够比较每个值并计算与 R 项目的匹配项
【发布时间】:2022-07-06 00:52:08
【问题描述】:

'数据框列中的列表或向量,以便能够比较每个值并计算与 R 项目的匹配项'

Col1 Col2
a 3,2,20,6
b 3,0,20,15
a 3,2,20,50
b 3,6,59,0
a 3,4,20,6

'我有两列,col2是一个字符,但是我需要把它转换成一个向量,例如: c(“3”、“2”、“20”、“6”、“4”、“64”、“7”、“65”、“76”、“26”、“52”、“67”、 ”66”, ”76”, ”22”), 能够应用 %in% 并获取 True 的个数, 例如:'

'Table$Col3

Col1 Col2 Col3
a 3,2,20,6
b 3,0,20,15 true, false, true, false
a 3,2,20,50
b 3,6,59,0 true, false, false, false
a 3,4,20,6 true, false, true, false

'最后算出真数'

Col1 Col2 Col3 Col4
a 3,2,20,6
b 3,0,20,15 true, false, true, false 2
a 3,2,20,50 true, true, true, false 3
b 3,6,59,0 true, false, false, false 1
a 3,4,20,6 true, false, true, false 2

'但是我无法将 Table$Col2[1] 转换为向量或列表,我总是得到引号之间的所有内容“c(“3”, ”2”, ”20”, ”6”, ”4” ,“64”,“7”,“65”,“76”,“26”,“52”,“67”,“66”,“76”,“22”)”,作为单个值,在此它比较整个列表的方式,而不是里面的值,而不是每个值。'

'我该如何解决这个问题?我突然想到,我可以将这些值分开,创建更多格式化为整数的列,然后将这些值连接起来以创建向量或列表,但我认为这会非常低效。'

【问题讨论】:

  • 您是在与“Col2”中的第一个 list 元素进行比较吗?您需要将Table$Col2[[1]] 提取为vector。逻辑不清楚
  • 你会dput你的数据吗?
  • @akrun: '是的,我想将第一行的值与其余的 fr 行进行比较'
  • @LauraMorcilloSánchez 为什么 Col3 的第三行是空的。第 3 行和第 1 行都有值 64?
  • @MohamedDesouky Desouky:'我的真实数据非常相似,我已将其简化以便能够放在这里'

标签: r vector


【解决方案1】:

我们可以用[[ 提取第一个list 元素,用map/imap(来自purrr)循环遍历list 列,用%in% 创建一个逻辑向量并获得TRUE 值的计数在 Col4 中,取 TRUE (TRUE -> 1 和 FALSE -> 0) 之和

library(purrr)
library(dplyr)
df1 %>%
   mutate(Col3 = imap(Col2, ~ if(.y == 1) NA else .x %in% Col2[[1]]), 
     Col4 = map_dbl(Col3, ~ sum(.x, na.rm = TRUE)))

-输出

# A tibble: 5 × 4
  Col1  Col2      Col3       Col4
  <chr> <list>    <list>    <dbl>
1 a     <dbl [4]> <lgl [1]>     0
2 b     <dbl [4]> <lgl [4]>     2
3 a     <dbl [4]> <lgl [4]>     3
4 b     <dbl [4]> <lgl [4]>     2
5 a     <dbl [4]> <lgl [4]>     3

数据

df1 <- structure(list(Col1 = c("a", "b", "a", "b", "a"), Col2 = list(
    c(3, 2, 20, 6), c(3, 0, 20, 15), c(3, 2, 20, 50), c(3, 6, 
    59, 0), c(3, 4, 20, 6))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -5L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多