![](/img/trans.png)
[英]Assigning 1 or 0 conditionally to a new column based on values from another dataframe in R
[英]Assigning values to a new column in R dataframe based on logical expression
我正在嘗試在我的 R dataframe 中創建一個新列,並根據其他列上的邏輯表達式分配值:
survey$session <- "0"
if(survey$delay == "0" && survey$intensive == "0") {survey$session <- "11"}
if(survey$delay == "0" && survey$intensive == "1") {survey$session <- "12"}
if(survey$delay == "1" && survey$intensive == "0") {survey$session <- "21"}
if(survey$delay == "1" && survey$intensive == "1") {survey$session <- "22"}
出於某種原因,實際上只有第 3 行在分配值,而我最終將整個列填充為“21”。
知道為什么會發生這種情況嗎? 蒂亞!
以下是解決問題要求的兩種方法。
1.使用邏輯索引就地分配。
survey <- data.frame(delay, intensive)
i0 <- survey$delay == "0"
i1 <- survey$delay == "1"
j0 <- survey$intensive == "0"
j1 <- survey$intensive == "1"
survey$session <- "0"
survey$session[i0 & j0] <- "11"
survey$session[i0 & j1] <- "12"
survey$session[i1 & j0] <- "21"
survey$session[i1 & j1] <- "22"
並清理干凈。
rm(i0, i1, j0, j1)
2.使用算術,因為要分配的值遵循一個模式。
survey <- data.frame(delay, intensive)
survey$session <- "0"
survey$session <- with(survey, 10*(as.integer(delay) + 1) + as.integer(intensive) + 1)
測試數據
set.seed(2020)
n <- 10
delay <- as.character(rbinom(n, 1, prob = 0.5))
intensive <- as.character(rbinom(n, 1, prob = 0.5))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.