我有一组100个变量,从CFM_1到CFM_100。每个变量都可以取1,2,3或4中的任何值。我想创建一个名为TEMP的新变量,如果任何CFM_1到CFM_100变量的值为1或2,那么它将取值1。请帮助我解决此R编程 - 根据基于100个变量的值创建新变量
回答
我的例子有点愚蠢,因为随机变量在这个矩阵的单个位置生成1或2的概率是1/2。对于矩阵的每一列,执行十次这样的操作,并且对于任何给定的行,您的临时变量将为TRUE的概率小于1%。无论如何,在这里。
df <- data.frame(replicate(5, sample(1:4, 10, replace = TRUE)))
names(df) <- paste("CFM", 1:ncol(df), sep = "_")
您的数据帧看起来像这样
df
CFM_1 CFM_2 CFM_3 CFM_4 CFM_5
1 2 2 1 4 4
2 2 2 1 3 4
3 2 1 1 3 3
4 1 2 3 3 2
5 3 4 2 4 4
6 3 4 4 2 2
7 3 1 3 2 2
8 1 2 4 1 2
9 3 2 1 3 2
10 1 3 1 4 3
假设现在,你已经在你的数据帧的其他变量,你想排除。我们将使用cbind将这些列预加入并附加到您的数据框中,如下所示。
df <- cbind(replicate(3,sample(1:4, 10, replace = T)),
df,
replicate(3,sample(1:4, 10, replace = T)))
names(df)[1:3]<- paste0("Var",1:3)
names(df)[9:11] <- paste0("Var", 9:11)
现在你的DF看起来像这样
df
Var1 Var2 Var3 CFM_1 CFM_2 CFM_3 CFM_4 CFM_5 Var9 Var10 Var11
1 4 1 4 4 1 3 1 3 1 3 1
2 4 2 3 2 4 3 2 1 2 3 3
3 4 2 4 4 2 1 1 2 2 3 2
4 4 4 2 4 4 1 3 2 2 1 2
5 4 2 1 4 4 4 1 1 2 2 2
6 1 4 2 3 1 4 4 2 1 3 2
7 3 2 4 4 2 3 4 3 1 1 1
8 1 3 3 3 3 2 3 3 2 2 2
9 3 3 2 1 4 3 4 1 4 2 1
10 2 1 1 2 1 2 4 1 2 1 1
您可以通过应用任何功能,数据的行分配值的变量temp每一行中,检查是否有任何数据是1或2.但首先你需要找出哪些列是你的数据。
您可以使用agrep
函数来执行近似字符串匹配。它会告诉你,你的数据帧的名称有字符他们"CFM"
如果你使用
cfm_cols <-agrep("CFM", names(df))
cfm_cols
[1] 4 5 6 7 8
temp <- apply(df[,cfm_cols], 1, function(x) any(x) %in% c(1,2))
temp
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
不如预期,他们都是TRUE
。
另一种解决方法,如果您想,就是用dplyr
库这个
library(dplyr)
df%>% rowwise() %>% select(contains("CFM")) %>%
mutate(TEMP = any(.) %in% c(1,2))
用更有效的解决方案编辑适当的R代码,部分被盗/从@ shayaa的答案采购...
第一行这里只提取你感兴趣的列(创建一个临时数据帧我们将在完成后将其删除):
new <- subset(df, select = paste0("CFM_", seq_len(100)))
df$TEMP <- 1 * (apply(new, 1, min) <= 2)
rm(new)
因此,您只需在每个整行中搜索指定的值,并将布尔结果转换为数字,并将其放置到原始数据框中。
抱歉,我无法破译这个。如果可能的话,请详细解释一下。 CFM变量在哪里出现在这里? –
对不起,我应该包括一个事实,即我假设您提到的“100个变量”是100列数据框中的列。我提供的代码查看所有列,因此不需要按名称调用列。如果有更多的列,你需要从计算中排除,代码会稍微改变。 – rosscova
是的情况是我有大约300列的数据框,但我只对这些100列感兴趣。我明白你的解释。但是,如果我只想包含我感兴趣的语法,可以让我知道语法上的变化。非常感谢您的帮助。 –
- 1. 根据现有变量使用R创建新变量
- 2. 是否可以根据多个变量的值创建变量?
- 3. 基于R中的滞后观察值创建一个变量
- 4. 如何根据现有变量创建新的r数据框变量
- 5. r data.frame创建新变量
- 6. 基于另一个变量的增量创建变量
- 7. R根据变量
- 8. ansible - 根据寄存器变量的输出创建新变量
- 9. 创建一个数据帧分类变量基于列的值
- 10. 基于变量创建DataReader
- 11. 创建一个新的变量基于其他变量在r中包含一个特定的值
- 12. Angular:基于变量值创建ng-class
- 13. 基于多个变量创建索引
- 14. 在基于几个索引变量的R中创建索引变量
- 15. 根据最后和当前观测变量值创建变量
- 16. 如何创建与不同的变量值的新变量,如果另一变量等于R中设定值?
- 17. R-新的变量根据组
- 18. R:创建一个基于列表的分类变量*
- 19. R - 基于序列在数据帧列表中创建变量
- 20. 根据变量值
- 21. 如何基于组变量,排名变量和stata中的值变量创建变量
- 22. SAS新变量基于新变量的优先值
- 23. R:ifelse语句创建新的变量等于第二个变量的值条件的第三个变量的值
- 24. 根据三个其他变量之间的比较创建新变量
- 25. 将变量重新编码为R中的两个新变量
- 26. 根据子程序自变量创建一个常量
- 27. tcl:如何使用变量的值创建一个新变量
- 28. 在C#中,我可以创建一个变量,根据变量的变化更新它的值吗?
- 29. 如何创建其值根据其他变量而变化的变量?
- 30. 根据其他列中值的顺序创建新变量
我编辑根据您的意见我的回答。 – shayaa
非常感谢你们的回答。特别是Shayaa。令人惊叹的。 –
欢迎您点击答案附近的复选框,选择一个对您最有帮助的选项。 – shayaa