Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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
R 如何将相同的转换应用于数据帧中的变量组?_R_Dataframe_Dplyr - Fatal编程技术网

R 如何将相同的转换应用于数据帧中的变量组?

R 如何将相同的转换应用于数据帧中的变量组?,r,dataframe,dplyr,R,Dataframe,Dplyr,我有一个包含许多变量的数据框架,这些变量的名称包括标记 mydf这就是你想要的 library(dplyr) mydf <- data.frame( var_x = 1:5, var_y = runif(5), var_z = runif(5), other_x = 10:14, other_p = runif(5), other_r = runif(5) ) my_df_var <- mydf %>% select(contains("var"))

我有一个包含许多变量的数据框架,这些变量的名称包括标记


mydf这就是你想要的

library(dplyr)

mydf <- data.frame(
  var_x = 1:5, var_y = runif(5), var_z = runif(5), 
  other_x = 10:14, other_p = runif(5), other_r = runif(5)
)

my_df_var <-
  mydf %>% 
  select(contains("var")) 

my_divided_var_df <-
  my_df_var / my_df_var[, 1]

my_df_other <-
  mydf %>% 
  select(contains("other")) 

my_divided_other_df <-
  my_df_other / my_df_other[, 1]

my_final_df <-
  bind_cols(my_divided_var_df, 
            my_divided_other_df)

my_final_df
  var_x     var_y      var_z other_x    other_p    other_r
1     1 0.1505216 0.50006694       1 0.01507284 0.04272813
2     1 0.3694496 0.07608916       1 0.03721775 0.07758692
3     1 0.1615257 0.05903999       1 0.04790595 0.00702291
4     1 0.1867266 0.15325190       1 0.06612689 0.03709427
5     1 0.1823187 0.15005917       1 0.02325902 0.05880811
库(dplyr)
mydf
var\u x\u orig%
变异每个(funs(/其他源),匹配(^other)

这可能会有所帮助。如果每个变量名有三列(例如,三列带“var”,三列带“other”),我会使用
lappy()
。然后,如有必要,绑定列以返回原始数据格式

# mydf
#  var_x     var_y     var_z other_x    other_p    other_r
#1     1 0.8393539 0.2685360      10 0.82749405 0.77923222
#2     2 0.8966534 0.6157903      11 0.30657267 0.97301619
#3     3 0.7426782 0.6982445      12 0.75195632 0.03107233
#4     4 0.9448537 0.3711827      13 0.68455120 0.45232667
#5     5 0.4848614 0.2108115      14 0.01126723 0.91213041

library(dplyr)

num <- seq(1, ncol(mydf), 3)

lapply(num, function(x) mydf[, x:(x+2)]) -> foo
lapply(foo, function(y) {y[,2] = y[, 2] / y[, 1]
                         y[,3] = y[, 3] / y[, 1]
                         y}) %>%
bind_cols(.)

#  var_x      var_y      var_z other_x      other_p     other_r
#1     1 0.83935391 0.26853595      10 0.0827494049 0.077923222
#2     2 0.44832669 0.30789516      11 0.0278702429 0.088456017
#3     3 0.24755938 0.23274817      12 0.0626630264 0.002589361
#4     4 0.23621343 0.09279569      13 0.0526577848 0.034794359
#5     5 0.09697229 0.04216230      14 0.0008048022 0.065152172
#mydf
#var_x var_y var_z其他
#1     1 0.8393539 0.2685360      10 0.82749405 0.77923222
#2     2 0.8966534 0.6157903      11 0.30657267 0.97301619
#3     3 0.7426782 0.6982445      12 0.75195632 0.03107233
#4     4 0.9448537 0.3711827      13 0.68455120 0.45232667
#5     5 0.4848614 0.2108115      14 0.01126723 0.91213041
图书馆(dplyr)
num foo
lapply(foo,函数(y){y[,2]=y[,2]/y[,1]
y[,3]=y[,3]/y[,1]
y} )%>%
绑定列(.)
#var_x var_y var_z其他
#1     1 0.83935391 0.26853595      10 0.0827494049 0.077923222
#2     2 0.44832669 0.30789516      11 0.0278702429 0.088456017
#3     3 0.24755938 0.23274817      12 0.0626630264 0.002589361
#4     4 0.23621343 0.09279569      13 0.0526577848 0.034794359
#5     5 0.09697229 0.04216230      14 0.0008048022 0.065152172

即使数据帧的结构不好,这种修改版本的
mymutate
也能工作(即,对于每种情况,应缩放的列数不相同)

#mydf
#var_x var_y var_z其他
# 1     1 0.1913353 0.4706113      10 0.003120607 0.17808048
# 2     2 0.1620725 0.6228830      11 0.844399758 0.01361841
# 3     3 0.5148884 0.3671178      12 0.996055741 0.33513972
# 4     4 0.8086168 0.3265216      13 0.984819261 0.96802056
# 5     5 0.9902217 0.9087540      14 0.951119864 0.82479090

mymutate你确定
mydf%>%mutate\u每个(funs(./var\u x),匹配项(“^var”)
都会给你想要的结果吗?@JasonAizkalns你是对的,这不起作用。我相应地更新了问题。
x
变量在除以它自身后将被更新为1,因此稍后我将把其他变量除以1。谢谢你的关注,谢谢你澄清。我相信发布的解决方案(到目前为止)能达到预期效果。我看不出它们如何允许
lappy
。。。也许需要一些调整。虽然我仍然不明白为什么我会收到错误消息,
'type'未找到
您的真实数据是什么样子的?和示例数据一样,每个变量名有三列吗?谢谢,听起来不错。我试试看。知道为什么找不到
“type”
?@janosdivenyi不知道发生了什么。我只是觉得每个人都要变异不是办法。看到你自己的函数,我想你是在要求R每次选取三个列并对每个列进行变异。如果有数百列,我想您应该使用lappy将函数应用于for循环。如果是这样的话,拆分数据并使用lappy似乎是一种好方法。是的,如果数据帧的结构如本例所示很好,则此解决方案有效。只需一句话:
bind.cols()
不是
dplyr
的一部分,而是
do.call(cbind,)
按预期工作。@janosdivenyi我的意思是
bind\u cols()
。对不起,我的打字错误。
# mydf
#  var_x     var_y     var_z other_x    other_p    other_r
#1     1 0.8393539 0.2685360      10 0.82749405 0.77923222
#2     2 0.8966534 0.6157903      11 0.30657267 0.97301619
#3     3 0.7426782 0.6982445      12 0.75195632 0.03107233
#4     4 0.9448537 0.3711827      13 0.68455120 0.45232667
#5     5 0.4848614 0.2108115      14 0.01126723 0.91213041

library(dplyr)

num <- seq(1, ncol(mydf), 3)

lapply(num, function(x) mydf[, x:(x+2)]) -> foo
lapply(foo, function(y) {y[,2] = y[, 2] / y[, 1]
                         y[,3] = y[, 3] / y[, 1]
                         y}) %>%
bind_cols(.)

#  var_x      var_y      var_z other_x      other_p     other_r
#1     1 0.83935391 0.26853595      10 0.0827494049 0.077923222
#2     2 0.44832669 0.30789516      11 0.0278702429 0.088456017
#3     3 0.24755938 0.23274817      12 0.0626630264 0.002589361
#4     4 0.23621343 0.09279569      13 0.0526577848 0.034794359
#5     5 0.09697229 0.04216230      14 0.0008048022 0.065152172