r语言提取列名_玩转数据处理120题之P81-P100(R语言tidyverse版本)

24cacccee63cd08cb987f334bb4e25a9.png

这是该系列的第四篇,第一、二、三篇见:

张敬信:玩转数据处理120题之P1-P20(R语言tidyverse版本)​zhuanlan.zhihu.com
18c23899a10d248071eca41d2e8e0971.png
张敬信:玩转数据处理120题之P21-P50(R语言tidyverse版本)​zhuanlan.zhihu.com
18c23899a10d248071eca41d2e8e0971.png
张敬信:玩转数据处理120题之P51-P80(R语言tidyverse版本)​zhuanlan.zhihu.com
18c23899a10d248071eca41d2e8e0971.png

本篇是P81-P100. 为了节省版面,输出结果只截取前10个观测。

题目81(加载查看包):加载并查看tidyverse包版本

难度:★

代码及运行结果:

library(tidyverse)

149cba50cdcde229b144369edd5dab8d.png

题目82(生成随机数):生成20个0~100的随机数,创建数据框

难度:★

代码及运行结果:

set.seed(123)                # 保证结果出现
df1 = tibble(nums = sample.int(100, 20))
df1

3b4bf44b7583b5939a3c81a456ba2f52.png

题目83(生成等差数):生成20个0~100固定步长的数,创建数据框

难度:★

代码及运行结果:

df2 = tibble(nums = seq(0, 99, by = 5))
df2

735e85f48d6c3427d2bb4710975fa772.png

题目84(生成指定分布随机数):生成20个标准正态分布的随机数,创建数据框

难度:★

代码及运行结果:

set.seed(111)
df3 = tibble(nums = rnorm(20, 0, 1))
df3

77a19405f45fed626b6b855cb9d385ba.png

题目85(合并数据):将df1, df2, df3按行合并为新数据框

难度:★

代码及运行结果:

bind_rows(df1, df2, df3)

a05c1276e8970f8227995ef48beb41d0.png

题目86(合并数据):将df1, df2, df3按列合并为新数据框

难度:★

代码及运行结果:

df = bind_cols(df1, df2, df3)
df

d31454ca3fcad7ae48b3f0f8d1087b29.png

题目87(查看数据):查看df所有数据的最小值、25%分位数、中位数、75%分位数、最大值

难度:★★

代码及运行结果:

unlist(df) %>% 
  summary()

13886cbbd795b15eb2c4611e20e9f031.png

题目88(修改列名):修改列名为col1, col2, col3

难度:★

代码及运行结果:

df = df %>% 
  set_names(str_c("col", 1:3))
df

52f23f698b3318b6dcca5a139a0f8e99.png

:若只修改个别列名,用rename(newname=oldname).

题目89(数据操作):提取在第1列中而不在第2列中的数

难度:★★

代码及运行结果:

setdiff(df$col1, df$col2)

18e0b1ea348c8f96a2eb34c6424ab59b.png

题目90(数据操作):提取在第1列和第2列出现频率最高的三个数字

难度:★★★

代码及运行结果:

tibble(nums = c(df$col1, df$col2)) %>% 
  group_by(nums) %>% 
  summarise(frq = n()) %>% 
  arrange(desc(frq)) %>% 
  slice(1:3)

686334ba2c42454a101378eab10bc799.png

或者用

c(df$col1, df$col2) %>% 
  table() %>% 
  sort(decreasing = TRUE) %>% 
  .[1:3]

6b593d599469b6c3be65d484c5f9dbb5.png

或者用

rlt = tibble(nums = c(df$col1, df$col2)) %>%
  sjmisc::frq(nums, sort.frq = "desc") 
 
rlt[[1]][1:3,]

e480621b5f60e54bf373384b9632a2c8.png

题目91(数据操作):提取第1列可以整除5的数的位置

难度:★★

代码及运行结果:

which(df$col1 %% 5 == 0)

dea6f485db1c27db943a558ccc994e2f.png

题目92(数据计算):计算第1列的1阶差分

难度:★★

代码及运行结果:

df %>% 
  mutate(diff1 = col1 - lag(col1))

bccaf76b28966e161cce692af38d0bd3.png

注:若只是要数值,用diff(df$col1)即可。

题目93(数据操作):将col1, col2, col3三列顺序颠倒

难度:★★

代码及运行结果:

df %>% 
  select(rev(names(df)))

0f6a0317ed02cb3fed008d36b0e15dd5.png

:更灵活的调整列序,dplyr1.0将提供relocate()函数。

题目94(数据操作):提取第一列位置在1,10,15的数

难度:★

代码及运行结果:

df[c(1,10,15),1]

cb6ce9f1613e6569caaeaf81542455ef.png

或者用

df %>% 
  select(col1) %>% 
  slice(1,10,15)

题目95(数据操作):查找第一列的局部最大值位置

难度:★★★★

代码及运行结果:

rlt = df %>% 
  mutate(diff = sign(col1 - lag(col1)) + sign(col1 - lead(col1))) 
 
which(rlt$diff == 2)

614aa7354d51623be72523413f031e1e.png

题目96(数据计算):按行计算df每一行的均值

难度:★★

代码及运行结果:

rowMeans(df)    # 或者 apply(df, 1, mean)

2e18cec424a9ef91a4a164afc7e579f5.png

题目97(数据计算):对第二列计算步长为3的移动平均值

难度:★★★

代码及运行结果:

df %>%
  mutate(avg_3 = tsibble::slide_dbl(col2, mean, .size = 3, .align = "center"))

4e88310c26369e2ac4b1bb07bb5cd082.png

题目98(数据计算):按第三列值的大小升序排列

难度:★★

代码及运行结果:

df %>% 
  arrange(col3)

67a47b2a76f616736db49124a1c20202.png

题目99(数据操作):按第一列大于50的数修改为"高"

难度:★★

代码及运行结果:

df %>% 
  mutate(col1 = sjmisc::rec(col1, rec = "50:max=高; else=copy"))
# 或者用 df[df$col1 > 50, 1] = "高"

e63145beb1faf8f1d76508985a723cc2.png

注:这里采用更有实用价值的重新编码。

题目100(数据计算):计算第一列与第二列的欧氏距离

难度:★★★

代码及运行结果:

dist(t(df[,1:2]))

b66ba31e862ac54f53863ffbd0ee46d9.png

参考文献

遥遥无期:玩转数据处理120题|Pandas版本​zhuanlan.zhihu.com
cb3b4faeeeade5e09977ec75179c1e71.png

版权声明:原创作品,欢迎转载,请注明出处,禁止用于出版。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值