比较2列或更多列,并在r中的另一列中获取匹配值

比较2列或更多列,并在r中的另一列中获取匹配值,r,R,大宗报价 输出: ***document*** Vote <dbl> <fct> 1 ---- happiness 2 -----happiness 3 ----- sadness 4 ----- happiness 输出应基于投票 我必须在这个中使用ifelse。您是否在每行中查找最常用的元素?我们可以将其应用于每一行数据: apply(dat,1,function(x) { ux <

大宗报价

输出:

***document***    Vote
      <dbl> <fct>            
1 ---- happiness      
2 -----happiness     
3 ----- sadness     
4 ----- happiness
输出应基于投票


我必须在这个

中使用ifelse。您是否在每行中查找最常用的元素?我们可以将其应用于每一行数据:

apply(dat,1,function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
})


          1           2           3           4 
"happiness" "happiness"   "sadness" "happiness" 

这应该是和,它使用ifelse

library(dplyr)
library(tibble)

data <- tibble(
  id = c(1, 2, 3, 4),
  score_1 = c("happiness", "happiness", "sadness", "happiness"),
  score_2 = c("happiness", "happiness", "sadness", "happiness"),
  score_3 = c("happiness", "happiness", "sadness", "happiness"),
  score_4 = c("happiness", "happiness", "happiness", "happiness")
)

ncol_data <- ncol(data)
data <- data %>%
  rowwise() %>%
  mutate(count_happiness = sum(c(score_1 == "happiness", score_2 == "happiness", score_3 == "happiness", score_4 == "happiness"))) %>%
  mutate(count_sadness = ncol_data - 1 - count_happiness) %>%
  mutate(Vote = ifelse(count_happiness >= count_sadness, "happiness", "sadness")) %>%
  select(id, Vote)
输出:

> data
Source: local data frame [4 x 2]
Groups: <by row>

# A tibble: 4 x 2
     id Vote     
  <dbl> <chr>    
1     1 happiness
2     2 happiness
3     3 sadness  
4     4 happiness

您能否显示预期输出预期输出应该是使两者匹配的值。因此,如果在文件1中,情绪和总分匹配,那么输出应该是幸福,因为他们都有幸福作为价值观,就像你提出自己的问题一样。如果任何行重复,这将返回一个逻辑值。根据您在编辑之前提出的问题,这可能接近您想要的内容?applydf,1,functionx lengthuniquex==1我需要用其他4列中最受欢迎的投票生成一个新列。@rr99然后分配我答案的输出。dat$mostpopular什么是x和ux我如何添加一个像上面我的输出那样的新列?您需要更改的唯一一件事就是将dat更改为您调用的任何数据。x和ux是函数变量,不应更改。
> data
Source: local data frame [4 x 2]
Groups: <by row>

# A tibble: 4 x 2
     id Vote     
  <dbl> <chr>    
1     1 happiness
2     2 happiness
3     3 sadness  
4     4 happiness