楼主: 天涯印象
4040 6

[问答] 如何对数据框某列数据进行判断,然后在后面一列对应进行赋值 [推广有奖]

  • 0关注
  • 0粉丝

已卖:48份资源

硕士生

4%

还不是VIP/贵宾

-

威望
0
论坛币
53 个
通用积分
0.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3305 点
帖子
58
精华
0
在线时间
142 小时
注册时间
2016-4-17
最后登录
2024-3-14

楼主
天涯印象 学生认证  发表于 2017-11-6 21:53:16 |AI写论文
10论坛币
QQ截图20171106214752.jpg 如图所示数据,RASTERVALUE是坡向数据的原始值,ASPECT是根据下面图片计算方法得到的,我现在想用R语言判断RASTERVALUE,自动给ASPECT赋值,如何做到呢?求大神啊 cdaspect.txt (11.45 KB)




QQ图片20171106214221.jpg


最佳答案

屋檐滴语 查看完整内容

library(dplyr) cdaspect = read.table("cdaspect.txt", header = T,sep=",") cdaspect %>% mutate(ASPECT = cut(RASTERVALU, breaks = c(0, seq(1, 15, 2), 16) * 22.5, labels = c(1L, 2L, 4L, 6L, 8L, 7L, 5L, 3L, 9L) ))->cdaspect cdaspect$ASPECT[which(cdaspect$ASPECT==9)]=1 试了下,这样也是可以的,为cheetahfly兄弟提供的思路点赞!
关键词:数据框 aspect value Aster PECT

沙发
屋檐滴语 发表于 2017-11-6 21:53:17
library(dplyr)
cdaspect = read.table("cdaspect.txt", header = T,sep=",")
cdaspect %>%
  mutate(ASPECT = cut(RASTERVALU,
                      breaks = c(0, seq(1, 15, 2), 16) * 22.5,
                      labels = c(1L, 2L, 4L, 6L, 8L, 7L, 5L, 3L, 9L)
  ))->cdaspect
cdaspect$ASPECT[which(cdaspect$ASPECT==9)]=1

试了下,这样也是可以的,为cheetahfly兄弟提供的思路点赞!

藤椅
屋檐滴语 发表于 2017-11-7 01:00:12
library(dplyr)
df %>%
  mutate(ASPECT=ifelse(
                                 (RASTERVALUE>=0,RASTERVALUE<22.5) |(RASTERVALUE>=337.5,RASTERVALUE<360),1,
                                 ifelse(RASTERVALUE>=22.5,RASTERVALUE<67.5,2,
                                        ifelse(……
                                               )
                                         )
                                     )
                               )
大题是这个思路,你参考下吧

板凳
cheetahfly 在职认证  发表于 2017-11-7 08:24:16
  1. library(tidyverse)
  2. data %>%
  3.     mutate(ASPECT = cut(RASTERVALU,
  4.                         breaks = c(0, seq(1, 15, 2), 16) * 22.5,
  5.                         labels = c(1L, 2L, 4L, 6L, 8L, 7L, 5L, 3L, 9L),
  6.            ASPECT = ifelse(ASPECT == 9L, 1L, ASPECT))
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
天涯印象 + 5 + 1 + 1 + 1 精彩帖子,非常感谢提供的精妙思路!

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
天涯印象 学生认证  发表于 2017-11-7 10:00:21
屋檐滴语 发表于 2017-11-7 01:00
library(dplyr)
df %>%
  mutate(ASPECT=ifelse(
感谢提供思路,我把这个代码补充修改后
  1. cdaspect <- read.csv(file="cdaspect.csv", header = T)

  2. library(dplyr)
  3. cdaspect %>%
  4.   mutate(ASPECT=ifelse(
  5.     (RASTERVALU>=0 & RASTERVALU<22.5) |(RASTERVALU>=337.5 & RASTERVALU<360),1,
  6.     ifelse(RASTERVALU>=22.5 & RASTERVALU<67.5,2,
  7.            ifelse(RASTERVALU>=292.5 & RASTERVALU<337.5, 3,
  8.                   ifelse(RASTERVALU>=67.5 & RASTERVALU <112.5, 4,
  9.                          ifelse(RASTERVALU >=247.5 & RASTERVALU < 292.5, 5,
  10.                                 ifelse(RASTERVALU>=112.5 & RASTERVALU<157.5, 6,
  11.                                        ifelse(RASTERVALU>=202.5 & RASTERVALU <247.5, 7,
  12.                                               ifelse(RASTERVALU>= 157.5 & RASTERVALU<202.5, 8
  13.                                                      
  14.                                               )
  15.                                              
  16.                                        )       )
  17.                          )
  18.                         
  19.                   )
  20.            )
  21.     )
  22.   )
  23.   )
复制代码
运行报错
Error in mutate_impl(.data, dots) :
  Evaluation error: argument "no" is missing, with no default.
请问这是怎么回事啊

地板
屋檐滴语 发表于 2017-11-7 11:10:33
天涯印象 发表于 2017-11-7 10:00
感谢提供思路,我把这个代码补充修改后运行报错
Error in mutate_impl(.data, dots) :
  Evaluation e ...
不好意思,我忘了,ifelse后面的判断条件应该用括号括起来;另外,你多写了一个ifelse,事实上不是1-7之间的任何一个,你的告诉计算机是8

7
屋檐滴语 发表于 2017-11-7 11:26:38
  1. library(dplyr)
  2. cdaspect <- read.table("cdaspect.txt", header = T,sep=",")
  3. cdaspect %>%
  4.   mutate(ASPECT=ifelse(
  5.     ((RASTERVALU>=0 & RASTERVALU<22.5) |(RASTERVALU>=337.5 & RASTERVALU<360)),1,
  6.     ifelse((RASTERVALU>=22.5 & RASTERVALU<67.5),2,
  7.            ifelse((RASTERVALU>=292.5 & RASTERVALU<337.5), 3,
  8.                   ifelse((RASTERVALU>=67.5 & RASTERVALU <112.5), 4,
  9.                          ifelse((RASTERVALU >=247.5 & RASTERVALU < 292.5), 5,
  10.                                 ifelse((RASTERVALU>=112.5 & RASTERVALU<157.5), 6,
  11.                                        ifelse((RASTERVALU>=202.5 & RASTERVALU <247.5), 7,
  12.                                               8)
  13.                                        )
  14.                                 )
  15.                   )
  16.            )
  17.     )
  18.   )
  19.   )
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 22:40