我很困惑为什么某些字符(例如“?”、“?”和“?”)在数据框中丢失了它们的变音符号,而其他字符(例如“Š”和“š”)不会。顺便说一下,我的操作系统是 Windows 10。在我下面的示例代码中,向量 czechvec 有 11 个单字符字符串,都是斯拉夫语重音字符。R 正确显示这些字符。然后使用 czechvec 作为第二列创建数据框 mydf (使用函数 I() 因此它不会转换为因子)。但是,当 R 显示 mydf 或 mydf 的任何行时,它会将这些字符中的大部分转换为它们的纯 ASCII 等价物;例如 mydf[3,] 将字符显示为“E”而不是“?”。但是用行和列下标,例如 mydf[3,2],它正确地显示了重音字符(“?”)。为什么 R 显示整行或仅显示一个单元格会有所不同?为什么像“Š”这样的一些字符完全不受影响?此外,当我将此数据框写入文件时,即使我指定了 fileEncoding="UTF-8",它也会完全失去重音。
> charvals <- c(193, 269, 282, 268, 262, 263, 348, 349, 350, 352, 353)
> hexvals <- as.hexmode(charvals)
> czechvec <- unlist(strsplit(intToUtf8(charvals), ""))
> czechvec
[1] "Á" "?" "?" "?" "?" "?" "?" "?" "?" "Š" "š"
>
> mydf = data.frame(dec=charvals, char=I(czechvec), hex=I(format(hexvals, width=4, upper.case=TRUE)))
> mydf
dec char hex
1 …Run Code Online (Sandbox Code Playgroud) 我想知道两个向量是否有任何共同的元素.我不关心元素是什么,有多少共同元素,或者它们在任何一个向量中的位置.我只需要一个简单,快捷的功能EIC(vec1, vec2),如果存在两个某个元素返回TRUE vec1并且vec2如果没有常见的两种元素,FALSE.我们也可以假设既不包含vec1也不vec2包含NA,但可能有重复的值.
我想过有五种方法可以做到这一点,但它们看起来效率都很低:
EIC.1 <- function(vec1, vec2) length(intersect(vec1, vec2)) > 0
# I want a function that will stop when it finds the first
# common element between the vectors, and return TRUE. The
# intersect function will continue on and check whether there are
# any other common elements.
EIC.2 <- function(vec1, vec2) any(vec1 %in% vec2)
EIC.3 <- function(vec1, vec2) any(!is.na(match(vec1, vec2)))
# the match function goes …Run Code Online (Sandbox Code Playgroud)