r - 基于其他值存在的新列
问题描述
我有这个df
:
Plot <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
Dist <- c(0,0,0,0,0,1,3,4,5,7,8,8,9,10)
df1 <- cbind(Plot, Dist)
我想根据该列创建一个具有不同值的新Dist
列。所以最终的 df 看起来像:
Plot <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
Dist <- c(0,0,0,0,0,1,3,4,5,7,8,8,9,10)
Grp1 <- c("CT", "CT", "CT", "CT","CT","INT", "INT","INT", "INT", "EXT", "EXT","EXT", "EXT","EXT")
df2 <- cbind(Plot, Dist,Grp1)
我尝试了这种方法:
library(dplyr)
df<-df%>%
as.data.frame %>%
group_by(Plot) %>%
mutate(CT = if(any(Dist == 0), "CENTRE")) %>%
mutate(CT = if(any(between(Dist, 1,7),"INTER"))) %>%
mutate(CT = if(any(Dist > 7),"EXT"))
但我得到以下信息:Erreur : ',' inattendu(e) in " mutate(CT = if(any(Dist> 7)
谢谢您的帮助
解决方案
首先,我认为您有一个数据框,使用cbind
您正在创建一个矩阵。
df1 <- data.frame(Plot, Dist)
由于每一行都有不同的Plot
值,因此您不需要group_by
Plot
. 你可以case_when
像这样使用:
library(dplyr)
df1 %>%
mutate(CT = case_when(Dist == 0 ~ 'CENTRE',
between(Dist, 1,7)~ "INTER",
Dist > 7 ~ "EXT"))
# Plot Dist CT
#1 1 0 CENTRE
#2 2 0 CENTRE
#3 3 0 CENTRE
#4 4 0 CENTRE
#5 5 0 CENTRE
#6 6 1 INTER
#7 7 3 INTER
#8 8 4 INTER
#9 9 5 INTER
#10 10 7 INTER
#11 11 8 EXT
#12 12 8 EXT
#13 13 9 EXT
#14 14 10 EXT
推荐阅读
- oracle - 在oracle表单12c中解锁取消选择的查询记录
- ios - 自动调整集合视图单元格大小会忽略首次显示时的自动布局
- ruby-on-rails - 用户会话的逻辑
- gerrit - Gerrit:防止自我审查,同时只允许自我提交
- c++ - C++ 在 char** 中获取 char* 的数量
- c - PIC24FJ64GA002 上的 ACKEN 位在确认序列后未清除
- javascript - 如何使用 React 获取新的 Twitch API 的总游戏观众?
- laravel - 在从 infyom 生成的 yajra 数据表中显示来自连接表的 field_name 而不是 field_id
- javascript - Google Maps Uncaught TypeError: b.has is not a function
- html - 如何使用显示拆分元素:使用 DomPDF 的两页表格