虽然R似乎在内部很好地处理Unicode字符,但是我无法在R中输出具有这种UTF-8 Unicode字符的数据帧.有没有办法强迫这个?
data.frame(c("h?ersumian","?mettigan"))->test
write.table(test,"test.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8")
Run Code Online (Sandbox Code Playgroud)
输出文本文件如下:
hiersumian <U+01E3>mettigan
我在Windows环境(Windows 7)中使用R 3.0.2版.
编辑
在答案中已经建议R正确地以UTF-8编写文件,问题在于我用来查看文件的软件.这里有一些代码,我在R中做所有事情.我正在用UTF-8编码的文本文件中读取,并且R正确读取它.然后R将文件写入UTF-8并再次读回,现在正确的Unicode字符消失了.
read.table("myinputfile.txt",encoding="UTF-8")->myinputfile
myinputfile[1,1]
write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8")
read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile
myoutputfile[1,1]
Run Code Online (Sandbox Code Playgroud)
控制台输出:
> read.table("myinputfile.txt",encoding="UTF-8")->myinputfile
> myinputfile[1,1]
[1] h?ersumian
Levels: h?ersumian ?mettigan
> write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8")
> read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile
> myoutputfile[1,1]
[1] <U+FEFF>hiersumian
Levels: <U+01E3>mettigan <U+FEFF>hiersumian
>
Run Code Online (Sandbox Code Playgroud) 我expression()在R图中使用以获得斜体文本.但似乎我不能expression在ASCII字符之外使用Unicode符号.有什么方法可以解决这个问题吗?我的目标是fi在我的R条形图中获得各种标签的连字(连同斜体文本).
我正在使用R for Windows 3.0.2版.
CairoPDF(file = "Ligature1.pdf")
plot.new()
text(x =.5, y = .5, labels = "?", family = "Times New Roman")
dev.off()
Run Code Online (Sandbox Code Playgroud)

CairoPDF(file = "Ligature2.pdf")
plot.new()
text(x =.5, y = .5, labels = expression(paste(italic(m), "u", "?", italic(m), sep = "")), family = "Times New Roman")
dev.off()
Run Code Online (Sandbox Code Playgroud)

在R中创建数据框时,字符串默认转换为因子(我不介意).但是当我想在我的数据框中创建一个新行时,我找不到将字符串编码为一个因子的方法.如果我使用factor(),字符串将转换为数字,但仍然不是一个因素.在任何一种情况下,我都无法将新行追加到数据框中,因为新行不是一个因素.我想要的是让我的新行表现得像我的数据帧,即将字符串转换为因子.
> data.frame(c("Name one", "Name two")) -> my.data
> colnames(my.data) <- "Names"
> is.factor(my.data$Names)
[1] TRUE
> new.row1 <- c("Name three")
> is.factor(new.row1)[1]
[1] FALSE
> new.row2 <- c(factor("Name three"))
> new.row2
[1] 1
> is.factor(new.row2)[1]
[1] FALSE
> rbind(my.data, new.row1)
Names
1 Name one
2 Name two
3 <NA>
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = "Name three") :
invalid factor level, NA generated
> rbind(my.data, new.row2)
Names
1 Name one
2 Name two
3 <NA>
Warning …Run Code Online (Sandbox Code Playgroud) 当我在R中提取数据帧列的因子级别时,它们会自动排序(按字母顺序排列).我怎么能阻止这个?也就是说,我希望级别的顺序与数据框列中的顺序相同.
data.frame(Names = c("Paul McCartney", "John Lennon")) -> my.data
levels(my.data$Names)
Run Code Online (Sandbox Code Playgroud)
[1]"约翰列侬""保罗麦卡特尼"
假设我在数据框列中有一系列考试成绩:
grades <- c("B", "C", "C", "C", "D", "D", "E", "F", "F")
grades.df <- data.frame(grades)
Run Code Online (Sandbox Code Playgroud)
在说明这一点时,插图会有点误导,因为它没有显示每个人都期望在那里的等级为0:"A":
barplot(table(grades))
如何将0次出现的"A"添加到此表中,以使其显示在零高度的条形图中?