首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改R中两个不同列值之间的名称位置

更改R中两个不同列值之间的名称位置
EN

Stack Overflow用户
提问于 2021-12-22 21:44:58
回答 2查看 63关注 0票数 0

我有一个data.frame,它显示水质与土地利用参数之间的相关性。在这个data.frame中,您有列xNameyNamecorrp.value。然而,在列xName中,yName并不是一个单独的专栏,仅仅是为了质量和单独使用。

例如,我只想要xName栏中的水质数据,yName栏中只有土地利用数据,因为顺序不会改变corrp.value的值。

最初,我考虑用mutate创建新列,其中显示xNameyName是否是土地使用和水质,然后使用case_whenrecode转换可能的名称。

但是我无法继续前进,因为它返回一个错误并且不更改名称。

代码语言:javascript
复制
df=read.table(text="xName   yName   corr    p.value classe_tipox2   classe_tipoy2
IQA_mean    soil    0.639727697 0.025073852 water   land
OD_mean veg 0.60989011  0.03029001  water   land
OD_mean grass   -0.576923077    0.042537186 water   land
soil    N_Total_mean    0.604577823 0.037305053 land    water
crop    N_Total_mean    0.695600561 0.012007646 land    water
crop    P_Total_mean    -0.624544589    0.029931227 land    water
DBO_mean    veg 0.797202797 0.003161252 water   land
DBO_mean    city    0.756757445 0.004382975 water   land
DBO_mean    grass   -0.825174825    0.001718596 water   land
veg P_Total_mean    -0.587412587    0.048844858 land    water
P_Total_mean    grass   0.629370629 0.03239475  water   land", sep="", header=TRUE)%>%
   
  #change names positions
    mutate(xName=case_when(
    classe_tipox2=='land' & classe_tipoy2=='water' ~ recode(xName=yName )
  ))

我希望当xName是土地使用类型时,xName被重命名为yName

EN

回答 2

Stack Overflow用户

发布于 2021-12-22 22:31:54

另一种选择(虽然有点冗长)。首先,我将数据放入长格式,然后使用ifelse语句“修复”xNameyName,然后将数据转回宽格式。

代码语言:javascript
复制
library(tidyverse)

df %>%
  pivot_longer(c(xName, yName)) %>%
  mutate(
    name = ifelse(
      name == "xName" &
        classe_tipox2 == 'land',
      "yName",
      ifelse(
        name == "yName" &
          classe_tipox2 == 'land',
        "xName",
        name
      )
    )
  ) %>%
  pivot_wider(names_from = name, values_from = value) %>% 
  select(5:6, 1:4) %>% 
  mutate(classe_tipox2 = "water", classe_tipoy2 = "land")

输出

代码语言:javascript
复制
# A tibble: 11 × 6
   xName        yName   corr p.value classe_tipox2 classe_tipoy2
   <chr>        <chr>  <dbl>   <dbl> <chr>         <chr>        
 1 IQA_mean     soil   0.640 0.0251  water         land         
 2 OD_mean      veg    0.610 0.0303  water         land         
 3 OD_mean      grass -0.577 0.0425  water         land         
 4 N_Total_mean soil   0.605 0.0373  water         land         
 5 N_Total_mean crop   0.696 0.0120  water         land         
 6 P_Total_mean crop  -0.625 0.0299  water         land         
 7 DBO_mean     veg    0.797 0.00316 water         land         
 8 DBO_mean     city   0.757 0.00438 water         land         
 9 DBO_mean     grass -0.825 0.00172 water         land         
10 P_Total_mean veg   -0.587 0.0488  water         land         
11 P_Total_mean grass  0.629 0.0324  water         land  
票数 2
EN

Stack Overflow用户

发布于 2021-12-23 00:13:03

一种基R方法

代码语言:javascript
复制
# get the conditional logic
chose <- df$classe_tipox2 == "land"

# then select the columns and bind with the rest of the data
cbind(setNames(data.frame(t(sapply(seq_along(chose), function(x) 
  'if'(chose[x], c(df$yName[x],df$xName[x]), c(df$xName[x],df$yName[x]))))), 
  colnames(df[,1:2])), df[,-c(1,2)])

          xName yName       corr     p.value classe_tipox2 classe_tipoy2
1      IQA_mean  soil  0.6397277 0.025073852         water          land
2       OD_mean   veg  0.6098901 0.030290010         water          land
3       OD_mean grass -0.5769231 0.042537186         water          land
4  N_Total_mean  soil  0.6045778 0.037305053          land         water
5  N_Total_mean  crop  0.6956006 0.012007646          land         water
6  P_Total_mean  crop -0.6245446 0.029931227          land         water
7      DBO_mean   veg  0.7972028 0.003161252         water          land
8      DBO_mean  city  0.7567574 0.004382975         water          land
9      DBO_mean grass -0.8251748 0.001718596         water          land
10 P_Total_mean   veg -0.5874126 0.048844858          land         water
11 P_Total_mean grass  0.6293706 0.032394750         water          land
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70455446

复制
相关文章

相似问题

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