r - 右 | 根据另一列中的条件更改列中的元素
问题描述
这可能是一个基本问题,所以事先道歉。我有一个包含以下列的数据库
Name Subject Marks Check
Mark English 45 P
Susan English 23 F
Gerald Math 33 P
如果 Check == 'F',我想将 10 添加到“标记”列中的值。有很多这样的行,所以我不想应用 for 循环
解决方案
在base R
中,我们可以使用简单的算术方法来更新
df$Marks <- with(df, (Check == 'F') * 10 + Marks)
或者在其中创建一个逻辑条件base R
并进行分配
i1 <- df$Check == 'F'
df$Marks[i1] <- df$Marks[i1] + 10
-输出
df
# Name Subject Marks Check
#1 Mark English 45 P
#2 Susan English 33 F
#3 Gerald Math 33 P
或者在data.table
某种程度上,赋值操作更简单,因为 data.table 的一般语法是[i, j, by]
其中i
可以是整数索引或逻辑条件。在这里,我们指定逻辑条件 ( Check == 'F'
),指定j
( Marks + 10
) 并将其分配 ( :=
) 到同一列。原始 data.frame 转换为data.table
withsetDT
library(data.table)
setDT(df)[Check == 'F', Marks := Marks + 10]
评估从左到右进行,即首先它转换为 data.table ( setDT
),评估,对 'Marks' 列i
上的表达式 () 进行赋值Marks + 10
或与dplyr
library(dplyr)
df %>%
mutate(Marks = case_when(Check == 'F' ~ Marks + 10L, TRUE ~ Marks))
数据
df <- structure(list(Name = c("Mark", "Susan", "Gerald"), Subject = c("English",
"English", "Math"), Marks = c(45L, 23L, 33L), Check = c("P",
"F", "P")), class = "data.frame", row.names = c(NA, -3L))
推荐阅读
- javascript - 在另一个文件中导出,在同一个文件中调用
- kubernetes - 在 KubernetesPodOperator 中共享一个卷?
- php - 安装性别 php 扩展
- python - win32con.DT_* 有哪些选项?用于windows的python绘制文本
- javascript - setAttribute 有时会返回 null
- api - Viber API 获取所有订阅者
- apache - 图像或静态文件的 Apache 优化
- c - 不知道如何正确编辑此代码
- jquery - JQuery $.post 不喜欢数据类型参数
- java - 使用 PDFBox 解析 PDF 文件 - 列重叠