Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据特定列更改Dataframe中的值_Dataframe_Na_R_Dplyr_Tidy - Fatal编程技术网

根据特定列更改Dataframe中的值

根据特定列更改Dataframe中的值,dataframe,na,r,dplyr,tidy,Dataframe,Na,R,Dplyr,Tidy,我目前有一个由置信区间的上下限和点估计组成的估计值。我想创建一个新的数据框,这样我可以在点估计值不等于零的地方绘制变量。对于n的每个值,如果点估计值为0,是否可以将上限和下限的值更改为?例如,在n=205时提供的数据帧中,y_pe=0因此我想将相应的y_lo和y_up更改为NA X1_lo <- c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0) X1_up <-c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0) X1_pe <-c(0 ,0 ,0 ,0

我目前有一个由
置信区间
的上下限和点估计组成的估计值。我想创建一个新的数据框,这样我可以在点估计值不等于零的地方绘制变量。对于
n
的每个值,如果点估计值为
0
,是否可以将上限和下限的值更改为?例如,在
n=205
时提供的数据帧中,
y_pe=0
因此我想将相应的
y_lo
y_up
更改为
NA

X1_lo <- c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
X1_up <-c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
X1_pe <-c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
x_lo <- c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
x_up <- c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
x_pe <- c(0 ,0 ,0 ,0 ,0 ,0 ,0 ,0, 0 ,0)
y_lo <- c(-24.71177, -25.13779, -16.19142, -15.63819 ,-15.42051 ,-16.11342, -17.10603 ,-18.00848 ,-19.59877, -12.91438)
y_up <- c(14.074116, 14.051209, 13.417954, 12.187319 ,13.602022, 12.943939,  1.317839 ,11.891103, 15.165398,  1.365459)
y_pe <- c(-2.984101, -2.867680, -2.695838 ,-2.583140, -2.416878 , 0.000000,  0.000000 , 0.000000 , 0.000000,  0.000000)


test.df <- cbind(n, X1_lo, X1_up, x_lo, x_up, y_lo, y_up, X1_pe, x_pe, y_pe) 

X1\u-lo在
i
j
中指定一个逻辑向量和列名,然后将“y\u-pe”为0的列分配给
NA

test.df[test.df[, "y_pe"] == 0, c("y_lo", "y_up")] <- NA

或者使用
tidyverse

library(dplyr)
library(tidyr)
library(stringr)
test.df %>%
   mutate(rn = row_number()) %>% 
   pivot_longer(cols = -c(n, rn), names_sep="_", 
        names_to = c("group", ".value")) %>%
   mutate_at(vars(lo, up), ~ replace(., pe == 0, NA)) %>%
   pivot_wider(names_from = "group", values_from = c('lo', 'up', 'pe'),
          names_repair = ~ str_replace(., "(.*)_(.*)", "\\2_\\1")) %>%
   select(-rn)
# A tibble: 10 x 10
#       n X1_lo  x_lo  y_lo X1_pe  x_pe  y_pe X1_up  x_up  y_up
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1   205    NA    NA -24.7     0     0 -2.98    NA    NA  14.1
# 2   205    NA    NA -25.1     0     0 -2.87    NA    NA  14.1
# 3   205    NA    NA -16.2     0     0 -2.70    NA    NA  13.4
# 4   205    NA    NA -15.6     0     0 -2.58    NA    NA  12.2
# 5   205    NA    NA -15.4     0     0 -2.42    NA    NA  13.6
# 6   205    NA    NA  NA       0     0  0       NA    NA  NA  
# 7   205    NA    NA  NA       0     0  0       NA    NA  NA  
# 8   205    NA    NA  NA       0     0  0       NA    NA  NA  
# 9   205    NA    NA  NA       0     0  0       NA    NA  NA  
#10   205    NA    NA  NA       0     0  0       NA    NA  NA  
库(dplyr)
图书馆(tidyr)
图书馆(stringr)
test.df%>%
变异(rn=行数())%>%
pivot_longer(cols=-c(n,rn),name_sep=“”,
名称_to=c(“组”,“.value”))%>%
在(变量(lo,up),~replace(,pe==0,NA))%>%
轴更宽(名称来自=“组”,值来自=c('lo','up','pe'),
名称\u repair=~str\u replace(,“(.*)\u(.*”,“\\ 2\uu\\1”)%>%
选择(-rn)
#一个tibble:10x10
#n X1_lo x_lo y_lo X1_pe x_pe y_pe X1_up x_up y_up
#            
#1205Na-24.700-2.98Na-14.1
#2205Na-25.100Na-2.87Na-14.1
#3205Na-16.20-2.70Na-13.4
#4205Na-15.60-2.58Na-12.2
#5205Na-15.400-2.42Na-13.6
#6205NaNa0.0Na-NA-NA
#7205NaNa0.0Na-NA-NA
#8205NaNa0.0Na-NA-NA
#9205钠钠0钠钠0钠钠钠
#10205钠钠0 0钠钠钠
数据
test.df我更喜欢akrun的答案,但这里有一个替代方法,使用tidyr的
mutate

library(tidyr)

test.df %>% mutate(y_up = ifelse(y_pe == 0, NA, y_up),
                   y_lo = ifelse(y_pe == 0, NA, y_lo))

什么是
n
这里是总分,我一直在使用melt和collect。顺便说一句,你展示了
矩阵而不是
数据。frame
你的意思是
test.df评论不用于扩展讨论;这段对话已经结束。
test.df <- data.frame(n, X1_lo, X1_up, x_lo, x_up, y_lo, y_up, X1_pe, x_pe, y_pe)
library(tidyr)

test.df %>% mutate(y_up = ifelse(y_pe == 0, NA, y_up),
                   y_lo = ifelse(y_pe == 0, NA, y_lo))