r - 基于 R 中的现有列创建新列

标签 r dataframe if-statement

这是我的数据框的示例。它来自一项调查,最初的问题是:“你在哪里?标记所有适用的选项。”

Code   Option1   Option2   Option3   Option4
101        A        C         NA        NA
102        B        D         NA        NA
103        A        B         D         NA
104        D        NA        NA        NA
105        A        B         C         D

我想转换此数据,以便每一列都是位置之一,如果您位于 4 个位置中的任何一个,您会得到 0/1:

Code   A   B   C   D
101    1   0   1   0
102    0   1   0   1
103    1   1   0   1
104    0   0   0   1
105    1   1   1   1

我尝试使用 ifelse 语句,但不断收到错误。有什么建议么?谢谢!

最佳答案

使用tidyverse

library(dplyr)
library(tidyr)
df1 %>%
    pivot_longer(cols = -Code, values_drop_na = TRUE) %>% 
    mutate(n = 1) %>% 
    select(-name) %>% 
    pivot_wider(names_from = value, values_from = n, values_fill = list(n = 0)) %>%
    select(Code, LETTERS[1:4])
#   Code A B C D
#1  101 1 0 1 0
#2  102 0 1 0 1
#3  103 1 1 0 1
#4  104 0 0 0 1
#5  105 1 1 1 1

或者使用mtabulate

library(qdapTools)
cbind(df1[1], +(mtabulate(as.data.frame(t(df1[-1]))) > 0))

或者使用melt/dcast

library(data.table)
dcast(melt(setDT(df1), id.var = 'Code', na.rm = TRUE), Code ~ value, length)

关于r - 基于 R 中的现有列创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59975802/

相关文章:

Mysql select with if else 和 order by 语句

r - “The format of predictions is incorrect”

r - 情节标题、标签等中的字符串和表达式

python - Pandas :加入有条件的数据框

r - 基于R中列的间隔制作垃圾箱

java - 无法在 Java 野生错误标记中使用 If 语句对参数未定义进行比较?

r - ggplot2中离散发散尺度的中点

r - 使用 SHLIB 编译和加载独立的 Rcpp 函数

Python Pandas Dataframe 过滤器不起作用

javascript - 简化 If 语句