我正在使用R的条形图阅读this article on fixing pie chart from WSJ。原文中有完整的代码,所以我在此不再赘述。我对这条线感到困惑:
dat$amount <- factor(amount_trans[dat$amount], levels=amount_trans)
特别是amount_trans[dat$amount]
。我理解总体目标是用“\ n”替换原始标签以获得更好的格式,并使用级别来修复订单。但我不确定这是怎么做到的。 dat$amount
是一个char数组,amount_trans
也是一个char数组。带有char数组的char数组的索引?
> dat$amount[1:2]
[1] "less_than_one_hour_per_week" "less_than_one_hour_per_week"
amount_trans <- c("less_than_one_hour_per_week"="<1 hr/\nwk",
"one_to_four_hours_per_week"="1-4 hrs/\nwk",
"one_to_three_hours_a_day"="1-3 hrs/\nday",
"four_or_more_hours_a_day"="4+ hrs/\nday")
以上行确实按预期工作,这会按预期更改标签。
然而,下次使用它(类似的想法,我仍然不知道为什么)只是不起作用:
dat$Task <-factor(title_trans[dat$Task], levels=title_trans)
它出于某种原因返回一些NA
,这是我尝试过的:
> title_trans <- c("Basic exploratory data analysis"="Basic exploratory\ndata analysis",
+ "Data cleaning"="Data\ncleaning",
+ "Machine learning, statistics"="Machine learning,\nstatistics",
+ "Creating visualizations"="Creating\nvisualizations",
+ "Presenting analysis"="Presenting\nanalysis",
+ "Extract, transform, load"="Extract,\ntransform, load")
> head(dat$Task)
[1] " Basic exploratory data analysis" " Data cleaning" " Machine learning, statistics"
[4] " Creating visualizations" " Presenting analysis" " Extract, transform, load"
> dat$Task <-factor(title_trans[dat$Task], levels=title_trans)
> head(dat$Task)
[1] <NA> <NA> <NA> <NA> <NA> <NA>
Levels: Basic exploratory\ndata analysis Data\ncleaning Machine learning,\nstatistics Creating\nvisualizations Presenting\nanalysis Extract,\ntransform, load
N/A
值令人费解。这也使最终的情节与截图中显示的不完全相同。
更新:现在我意识到数据中的额外空白区域会导致匹配给出NA
s。困惑解决了。
答案 0 :(得分:1)
带char数组的char数组的索引?
不,使用名称向量索引命名字符向量(非数组):
values = c(a = 1, b = 2, c = 3)
values['a'] # 1
values[c('b', 'c')] # 2, 3
这就是那里发生的一切。我不知道为什么代码的原作者将矢量名称放在引号中但是没有必要,而且实际上很奇怪:
amount_trans <- c(less_than_one_hour_per_week = "<1 hr/\nwk",
one_to_four_hours_per_week = "1-4 hrs/\nwk",
one_to_three_hours_a_day = "1-3 hrs/\nday",
four_or_more_hours_a_day = "4+ hrs/\nday")