首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >map函数能代替原来的数据框吗?

map函数能代替原来的数据框吗?
EN

Stack Overflow用户
提问于 2020-09-20 23:22:14
回答 4查看 103关注 0票数 0

我有三个变量RR1234,RR5678,RR0135:

代码语言:javascript
复制
RR1234   <- rnorm(100, 2, 3)
RR5678    <-  rnorm(100,3,4)
RR0135    <- rnorm(100,4,5)  
x   <- data.frame(RR1234,RR5678,RR0135)

我有一个修剪x的函数

代码语言:javascript
复制
done   <- function(x){
   x[x > 1] = NA
   return(x)
}

我想修剪RR1234RR5678

代码语言:javascript
复制
c(x$RR1234,x$RR5678) %>% map(done)

x中的数据保持不变。

我也尝试过:

代码语言:javascript
复制
x   <-  x %>%  select(RR1234,RR5678) %>% map(done)

虽然前两个变量运行良好,但第三个变量RR0135消失了。

有没有什么方便的方法来替换x中的这两个变量

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-09-20 23:33:32

让我们来看看您尝试过的内容:

代码语言:javascript
复制
c(x$RR1234,x$RR5678) %>% map(done)

这将在x上执行操作,但不会更改x的内容。除非将操作分配回x,否则x的内容不会更改。

代码语言:javascript
复制
x   <-  x %>%  select(RR1234,RR5678) %>% map(done)

这行代码确实更改了x,但是来自dplyrselect动词意味着您只包含这两列。其他列已从操作中丢弃。如果您想要更改这两列,而不是第三列,您可以这样做。这里有两种方法。两者都不使用map()

代码语言:javascript
复制
# Generate the data using set.seed to make it reproducible
set.seed(1)
RR1234   <- rnorm(100, 2, 3)
RR5678    <-  rnorm(100,3,4)
RR0135    <- rnorm(100,4,5)  
x   <- data.frame(RR1234,RR5678,RR0135)

使用base R功能,您可以使用$ to subset将新值分配给data.frame列,而无需更改任何其他内容。这适用于任何其他类型的子集。

代码语言:javascript
复制
# base R
x$RR1234 <- done(x$RR1234)
x$RR5678 <- done(x$RR5678)

使用dplyr 1.0版或更高版本,您可以使用以下内容。mutate(across(...))结构允许您根据向across传递条件和函数来更改多个列。

代码语言:javascript
复制
x %>% mutate(across(c("RR1234", "RR5678"), done))
票数 2
EN

Stack Overflow用户

发布于 2020-09-20 23:32:18

我建议你使用dplyracross()。当你想转换一些变量时,最好使用mutate()。代码如下:

代码语言:javascript
复制
library(dplyr)
#Data
RR1234   <- rnorm(100, 2, 3)
RR5678    <-  rnorm(100,3,4)
RR0135    <- rnorm(100,4,5)  
x   <- data.frame(RR1234,RR5678,RR0135)
#Function
done   <- function(x){
  x[x > 1] = NA
  return(x)
}
#Code
x2 <- x %>%  mutate(across(RR1234:RR5678,~done(.)))

输出:

代码语言:javascript
复制
         RR1234     RR5678      RR0135
1    0.94194089         NA  13.0713017
2   -0.33647069 -2.3019341   9.4639157
3            NA -0.5368949  -6.4242588
4            NA         NA   4.4593853
5            NA         NA   0.6853094
6            NA         NA   7.6834331
7            NA         NA   1.8147963
8   -0.41588192         NA   9.3598014
9    0.76115066         NA  10.8331170
10           NA         NA   4.7973967
11           NA -2.3059266  -7.7575549
12           NA         NA   1.8152209
13           NA         NA  -0.9860351
14           NA         NA  12.1584945
15  -2.24455694  0.6763838  -4.2775746
16           NA         NA  -0.4178979
17           NA         NA  11.2213595
18           NA         NA  -2.2960382
19           NA         NA   0.3525616
20           NA -2.0038667   2.9802946
21           NA  0.7472525   4.0493003
22           NA         NA  13.6511832
23           NA         NA   6.5547820
24           NA -2.2045896   1.2317368
25  -0.62548661 -0.8736796   0.5770349
26           NA  0.4075356   9.2716612
27           NA         NA   4.1747139
28           NA         NA  -7.3872696
29   0.94287484 -8.0979632   0.5209943
30           NA -3.9503837   4.1438962
31  -2.74859617         NA   4.0467313
32           NA         NA   9.4205472
33           NA         NA -10.1071739
34           NA         NA  13.7521859
35  -1.15968127         NA  -4.0899815
36           NA         NA   7.7387901
37  -2.45832478         NA  -5.6710160
38  -3.09780799 -2.4786657  -4.1983864
39           NA         NA   8.0691432
40   0.44259503         NA  -2.4539690
41           NA         NA  -4.2937684
42           NA         NA  -3.4187835
43  -1.67688948         NA   5.2468200
44           NA  0.1528275  -6.1676265
45           NA         NA   6.5787688
46           NA         NA   1.2673593
47  -5.77722184         NA   6.7476928
48  -0.71438036 -0.6985110   1.1490648
49  -2.69295812         NA   2.7580518
50           NA         NA   6.7804525
51           NA         NA  -1.0621607
52           NA         NA   3.7175144
53           NA         NA   6.3843942
54           NA         NA   8.3657269
55  -1.46609589         NA  -2.5650315
56           NA -9.7247597  -1.0451021
57           NA         NA  11.2932211
58  -0.38620085         NA   6.5005979
59           NA         NA   2.5991516
60  -0.63715413         NA   2.9463852
61   0.12413129 -0.2764512  13.8596677
62           NA -3.5446673  -0.5171467
63           NA         NA   3.9371540
64  -0.31371041         NA   8.9294396
65  -1.18244591         NA   8.4827556
66  -4.83866907         NA   3.9618274
67           NA         NA  10.1643994
68  -0.75624474         NA  -3.2039191
69  -3.62029427         NA  -1.8827352
70           NA         NA   3.3186486
71           NA -2.9736113   4.0444030
72           NA         NA   5.6982921
73  -1.35997829  0.9391924   4.2699128
74  -3.48608075         NA  -2.0635431
75  -6.89075863 -5.9582709   0.4530760
76           NA  0.2738838  -3.4495561
77  -4.11640879 -1.6386795   8.9934335
78  -4.49512380         NA  -4.5578025
79  -2.66125238 -2.1222533   1.7672672
80           NA  0.3992611   1.6496420
81           NA         NA  -4.8627943
82  -0.41373126 -3.4452060  -2.9630815
83  -1.74671667         NA   2.0555012
84  -0.58334242         NA   6.2798613
85           NA         NA   2.1313488
86           NA         NA  15.9778175
87  -1.08969338         NA  -5.5826951
88           NA -2.4728756   4.6548008
89           NA -5.0936805  10.6863344
90           NA         NA   6.3066017
91           NA         NA   3.7410041
92           NA         NA  -4.8135729
93           NA         NA   9.3064735
94  -0.04695171         NA   4.4903433
95           NA         NA  11.7926356
96           NA         NA   4.7113170
97  -4.08935228         NA   7.9562516
98           NA         NA  13.9372643
99           NA         NA   1.6008497
100          NA         NA   5.4534442
票数 2
EN

Stack Overflow用户

发布于 2020-09-20 23:32:37

我很惊讶你正在使用purrr::map和magrittr/tidyverse管道%>%,但对dplyr::mutate并不熟悉,因为这两个包通常是一起教授的,而dplyr是最先教授的。

代码语言:javascript
复制
dplyr::mutate(x, across(c(RR1234, RR5678), done))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63980579

复制
相关文章

相似问题

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