微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R 中使用数组派生新变量

如何解决在 R 中使用数组派生新变量

考虑到我们有如下数据框并且它生成一个数据集,现在我想根据这些变量“MPD1FL”、“MPD2FL”、“MPD3FL”推导出一个新的变量 MPDFL。因此,如果这些变量中的任何一个具有 Y,那么 MPDFL 应该具有 Y,否则为 N。

data <- data.frame(ID=c(1,2,3,4,5,6),MPD1FL=c('N','Y','N','N'),MPD2FL=c('Y',MPD3FL=c('N','Y'))

ID  MPD1FL  MPD2FL  MPD3FL
<dbl>   <fct>   <fct>   <fct>
1   N   Y   N
2   Y   N   N
3   Y   N   N
4   N   Y   Y
5   N   N   N
6   N   N   Y

我尝试了以下代码但它不起作用,感谢您对 R 代码的帮助

val <- c('MPD1FL','MPD2FL','MPD3FL')
for (val in val) {
    data2 <- data %>% mutate(MPDFL=if_else(val=='Y','N'))
}

data2

谢谢,

锯齿

解决方法

这是一个基本的 R 解决方案。

data2 <- data
data2$MPDFL <- c("N","Y")[(rowSums(data[-1] == "Y") > 0L) + 1L]

data2
#  ID MPD1FL MPD2FL MPD3FL MPDFL
#1  1      N      Y      N     Y
#2  2      Y      N      N     Y
#3  3      Y      N      N     Y
#4  4      N      Y      Y     Y
#5  5      N      N      N     N
#6  6      N      N      Y     Y
,
attach(data)
library(dplyr)
data$MPDFL<-case_when(data$MPD1FL=='Y'|data$MPD2FL=='Y'|data$MPD3FL=='Y'~'Y',TRUE~'N')
,

您也可以使用 Number Occurrence 0 54 1 40 2 45 3 57 4 47 5 50 6 59 7 50 8 47 9 51 [54,40,45,57,47,50,59,51] The occurrence of 2's is 45 循环来执行此操作,尽管这肯定比其他已发布的答案效率低:

for

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?