R:使用lappy时出现问题
我有一个数据帧。我想要实现的是将一列(表示月份)编码为2个字符(长度为2的字符串),而不是整数 以下是一些数据示例:R:使用lappy时出现问题,r,dataframe,R,Dataframe,我有一个数据帧。我想要实现的是将一列(表示月份)编码为2个字符(长度为2的字符串),而不是整数 以下是一些数据示例: wifi <- data.frame(replicate(2,8:12)) 我想要这样的东西: X1 X2 1 8 8 2 9 9 3 10 10 4 11 11 5 12 12 X1 X2 1 8 08 2 9 09 3 10 10 4 11 11 5 12 12 下面是我做的函数: A <
wifi <- data.frame(replicate(2,8:12))
我想要这样的东西:
X1 X2
1 8 8
2 9 9
3 10 10
4 11 11
5 12 12
X1 X2
1 8 08
2 9 09
3 10 10
4 11 11
5 12 12
下面是我做的函数:
A <- function(x) {
if(nchar(x)==1) {
return(paste0("0",x))
} else {
return(x)
}
}
这是我得到的结果,似乎这个函数对所有元素应用了一次,而不是对每个元素
X1 X2
1 8 08
2 9 09
3 10 010
4 11 011
5 12 012
警告信息:
在if(nchar(x)==1){
条件的长度大于1,并且只使用第一个元素
有人知道我可以解决这个问题吗?你应该改用sprintf函数 这将应用于所有列:
sapply(wifi, function(x) sprintf("%02.0f", x))
这仅适用于第二个:
sprintf("%02.0f", wifi$X2)
sprintf
是一个内置函数,用于格式化字符串(与C中的相同),它完全按照a
函数的要求执行
最好对数据帧使用
sapply
。我会使用sprintf()解决它
但是,最好使用向量化的ifelse()
并删除*apply()
:
A非常感谢您的回答,我以前看过这个ifelse,但现在感谢您,我知道它的用途了:)
sprintf("%02.0f", wifi$X2)
A <- function(x) {
sprintf("%02d", x)
}
wifi[[2]] <- A(wifi[[2]])
wifi
X1 X2
1 8 08
2 9 09
3 10 10
4 11 11
5 12 12
sapply(wifi[[2]], A)
A <- function(x) {
x <- as.character(x)
ifelse(nchar(x) == 1, paste0("0", x), x)
}