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

b0b5259c7637130411a23520272f9336.png

前言

今天在微信公众号【早起Python】,看到有篇文章叫做【玩转数据处理120题】,最初来自【Pandas进阶修炼120题】,作者刘早起开始是用pandas实现的,后来又加入了中山大学博士陈熹的R语言版本。

但是这个R语言版本,代码比较陈旧和啰嗦,甚至是误解(比如R语言处理Excel文件不好之类,mutate与summarise混淆),根本没有体现出如今R语言在有了tidyverse之后,在数据处理上比python更加“简洁”和“优雅”。

所以,我打算利用R语言 tidyverse,也来玩转一下这个数据处理120题。同时也是为如今的R语言正名,不要停留在R语言不好用的老观念上。

本篇先来第1-20题。


题目1(创建数据框):将下面的字典创建为DataFrame

data = {"grammer": ["Python","C","Java","GO",np.nan,"SQL","PHP","Python"], "score":[1,2,np.nan,4,5,6,7,10]}

难度:★

代码及运行结果:

df = tibble(
 grammer = c("Python","C","Java","GO", NA,"SQL","PHP","Python"), 
 score = c(1,2,NA,4,5,6,7,10)
 )
df

26c44ae539c70e01163ac95ef3d382f7.png

问题2(筛选行):提取含有字符串"Python"的行

难度:★

代码及运行结果

df %>%
  filter(grammer == "Python")

55883303c6fba6d56111370e677848d9.png

题目3(查看列名):输出df的所有列名

难度:★

代码及运行结果

names(df)

c63074caf2aae489ce37abc8f9c8ccef.png

题目4(修改列名):修改第2列列名为"popularity"

难度:★★

代码及运行结果

df = df %>%
  rename(popularity = score)
df

bdafeaedf8bda50ef7988dda6e647819.png

题目5(统计频数):统计grammer列中每种编程语言出现的次数

难度:★★

代码及运行结果

df %>%
  count(grammer)   # 或者用 table(df$grammer)

fb4f7a7a156ac9fb146ba786504bc859.png

题目6(缺失值处理):将空值用上下值的平均值填充

难度:★★★

代码及运行结果

df = df %>%
  mutate(popularity = zoo::na.approx(popularity))
df

c265c4f130113ec8eaf72093933d0068.png

:dplyr包提供了fill()函数,可以用前值或后值插补缺失值。

题目7(筛选行):提取popularity列中值大于3的行

难度:★★

代码及运行结果

df %>%
  filter(popularity > 3)

5892ef4b5d409f3573cbfb96ec3f7374.png

题目8(数据去重):按grammer列进行去重

难度:★★

代码及运行结果

df %>%
  distinct(grammer, .keep_all = TRUE)

0c94ad7d9ab67e7369c708d80f1d74a5.png

题目9(数据计算):计算popularity列平均值

难度:★★

代码及运行结果

df %>%
  summarise(popularity_avg = mean(popularity))

c5a4405f66fd4112e5b6b1b80d523f46.png

题目10(格式转换):将grammer列转换为序列

难度:★

代码及运行结果

df$grammer

3180dcb6bc7842720c26f7d073326a88.png

注:R从数据框中提取出来就是字符向量。

题目11(数据保存):将数据框保存为Excel

难度:★★

代码及运行结果:

writexl::write_xlsx(df, "filename.xlsx")

题目12(数据查看):查看数据的行数列数

难度:★

代码及运行结果:

dim(df)

9888e2ca45d20ecb179f41811efacdb1.png

题目13(筛选行):提取popularity列值大于3小于7的行

难度:★★

代码及运行结果:

df %>%
  filter(popularity > 3 & popularity < 7)

a55cce223e12484bc970d21204d12415.png

题目14(调整列位置):交互两列的位置

难度:★★

代码及运行结果:

df %>%
  select(popularity, grammer)

d68926483daceb4749b84c48edc1069a.png

:可配合everything()放置“其余列”,更强大的调整列位置的函数是dplyr1.0将提供的relacate().

题目15(筛选行):提取popularity列最大值所在的行

难度:★★

代码及运行结果:

df %>%
  filter(popularity == max(popularity))
# 或者用df %>% top_n(1, popularity)

00c2c79ed96b800b3f122ed256637f62.png

题目16(查看数据):查看最后几行数据

难度:★

代码及运行结果:

tail(df)   # 默认是最后6行

:此外,head()查看前几行,dplyr包还提供了sample_n()和sample_frac()随机查看n行或某比例的行。

4c6912d9e3a92e5f0b17892180c0cbcb.png

题目17(修改数据):删除最后一行数据

难度:★★

代码及运行结果:

df %>%
  slice(-n())

bea0963330bce910501946115a944c5a.png

题目18(修改数据):添加一行数据:"Perl", 6

难度:★★

代码及运行结果:

newrow = tibble(grammer="Perl", popularity=6)
 
df %>%
  bind_rows(newrow)

d22129de42a579c503f5c67741f41681.png

题目19(数据整理):对数据按popularity列值从到大到小排序

难度:★★

代码及运行结果:

df %>%
  arrange(desc(popularity))

c4641d387a32b7ce8908188e48a3e715.png

:不套一层desc(), 是默认从小到大排序。

题目20(字符统计):统计grammer列每个字符串的长度

难度:★★

代码及运行结果:

df %>%
  mutate(strlen = str_length(grammer))

6e345ff36921e9d4443bf5a49a8e29d9.png

参考文献

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值