首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R中的条件从另一列计算列

使用R中的条件从另一列计算列
EN

Stack Overflow用户
提问于 2021-01-16 15:34:49
回答 3查看 44关注 0票数 0

我有一个数据框,像这样;

代码语言:javascript
复制
method               SOC
walkley black        0.5
walkley black        1.2
combustion           0.8
combustion           0.7

我想创建一个名为new_SOC的新专栏。我想将SOC乘以10,并将其放入new_SOC中。我想这样做只是为了让walkley black方法和其他方法变得简单。

我写了以下代码,但没有成功:非常感谢您的帮助。

代码语言:javascript
复制
## make an empty column called new_SOC
df$new_SOC <- c("")
## Make a loop to calculate the new column with condition.
for (i in 1:length(df)){
   if (df$method == " walkley black")  {
      df$new_SOC = df$SOC*10
      }
   else{df$new_SOC == "NA"}
   }
EN

回答 3

Stack Overflow用户

发布于 2021-01-16 15:36:34

您可以使用ifelse

代码语言:javascript
复制
df$new_SOC  <- ifelse(df$method == "walkley black", df$SOC*10, NA)
票数 0
EN

Stack Overflow用户

发布于 2021-01-16 18:24:44

使用dplyr,您可以:

代码语言:javascript
复制
library(dplyr)
df <- df %>% 
  mutate(new_SOC = ifelse(method == " walkley black", 10*SOC, NA))

但是,如果walkley black是以不同的方式编写的:

代码语言:javascript
复制
library(dplyr)
library(stringr)
  df <- df %>% 
  mutate(new_SOC = ifelse(str_detect(method,"walkley black"), 10*SOC, NA))
票数 0
EN

Stack Overflow用户

发布于 2021-01-17 03:31:09

我们也可以使用case_when

代码语言:javascript
复制
library(dplyr)
df1 <- df %>%
         mutate(new_SOC = case_when(method == "walkley black" ~ SOC * 10))

或者使用base R

代码语言:javascript
复制
i1 <- df$method == 'walkley black"
df$new_SOC[i1] <- df$SOC[i1] * 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65747420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档