簡體   English   中英

根據邏輯表達式為 R dataframe 中的新列賦值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM