我有一个看起来有点像这样的数据框:
ID Hero Win Rate Matches Played KDA Ratio Wraith King Abaddon Lich Lycan Centaur Warrunner Zeus Necrophos Death Prophet
27 Slardar 52.32% 2,741,067 2.42 -0.63% -2.16% -3.01% 2.40% -0.75% -3.29% -1.93% -1.83%
50 Doom 49.10% 3,202,905 2.50 -3.57% 1.72% -0.74% -3.12% 0.03% -1.76% -0.88% -2.62%
78 Bounty Hunter 45.29% 4,146,758 2.17 -1.56% -2.67% -1.43% 0.51% -2.17% -3.33% -2.19% 0.63%
92 Chen 44.34% 546,677 1.72 -0.27% -0.51% -1.35% -0.81% -0.24% -0.33% 0.03% -1.33%
我似乎可以指定例如执行此操作的第一行到新的data.frame:
newdataframe <- data.frame(Hero=subsetheroes[1,2],subsetheroes[1,6:ncol(subsetheroes)],stringsAsFactors = FALSE)
其中subsetheroes是旧的data.frame。它有效:
Hero Wraith.King Abaddon Lich Lycan Centaur.Warrunner Zeus Necrophos Death.Prophet Terrorblade Vengeful.Spirit Omniknight
27 Slardar -0.63% -2.16% -3.01% 2.40% -0.75% -3.29% -1.93% -1.83% -1.35% -1.65% -1.79%
但是,我想将其中包含百分比的行转换为原始数字,并将它们分配给新的数据框。我认为这样可行:
totals <- data.frame(Hero=subsetheroes[1,2],as.numeric(sub("%", "", subsetheroes[1,6:ncol(subsetheroes)])),stringsAsFactors = FALSE)
不幸的是,输出结果如下:
Hero as.numeric.sub..........subsetheroes.1..6.ncol.subsetheroes....
1 Slardar -0.63
2 Slardar -2.16
3 Slardar -3.01
4 Slardar 2.40
数字转换得很漂亮,但它会使每个条目成为新行,并重复第1列。
为什么通过添加as.number()和sub()函数会表现得如此奇怪?
编辑:我已经把代码放在这里生成表:http://pastebin.com/rRKYxawV - subsetheroes表只是使用subset()函数从heroestable中的几行。
答案 0 :(得分:1)
试试这个:
x <- subsetheroes[,c(2,6:ncol(subsetheroes))]
x[,2:ncol(x)] <- lapply(x[,2:ncol(x)],function(x) as.numeric(gsub(pattern="%","",x,fixed = TRUE)))
抓住所有东西,而不仅仅是一排,但你明白了。跳过尝试使用data.frame
。只需子集,然后单独进行替换和转换。