QUESTION 1
The first problem is
when you have column headers that are values, not variable names.
(值作为了标题名)
例如:
> grade male female
1 A 5 3
2 B 4 1
3 C 8 6
4 D 4 5
5 E 5 5
##变量中的female和male就是上面所说的变量名中含有了变量,female和male应该是“性别”这个变量的的变量值
gather函数
> gather(students,sex,count,-grade)
> #第一个参数,为要操作的变量名,第二个参数为Key,即旧变量名生成的一个新变量的名称。第三个参数为原来的变量值生成新的一列的变量名,第四个负号表示不动grade一列(选取所有的其他列),也可以用:来正向选取连续几列
> #key, value
> Names of new key(新的变量名称,变量值为原来的旧变量名) & value columns(变量值列的新变量名), as strings or symbols.
grade sex count
1 A male 5
2 B male 4
3 C male 8
4 D male 4
5 E male 5
6 A female 3
7 B female 1
8 C female 6
9 D female 5
10 E female 5
作用:类似于Excel里的数据透视表,整理混乱的数据,新定义变量名字
QUESTION 2
The second messy data case
when multiple variables are stored in one column.
grade male_1 female_1 male_2 female_2
1 A 7 0 5 8
2 B 4 0 5 8
3 C 7 4 5 6
4 D 8 2 8 1
5 E 8 4 1 0
#与上一个问题类似,这个变量值也作为了变量名并且是交叉的两个。性别和级别()
解决办法分两步
第一,类似于上一种使用gather函数
> res<- gather(students2,sex_class,count,-grade)
> #第一个为输入的变量名,第二个为key——变量名生成一个新的变量,第三个变量为变量值,取变量值的变量名为count,最后负号表示不变动grade列
> > res
grade sex_class count
1 A male_1 7
2 B male_1 4
3 C male_1 7
4 D male_1 8
5 E male_1 8
6 A female_1 0
7 B female_1 0
8 C female_1 4
9 D f