如果第一列是T或F,我想读取一个数据帧读取,并且根据这一点,我将使用第二列中的数据向矩阵中的新列添加一个新条目。
If z[,1] == true set z[,4] to 2*z[,2]
else set z[,4] to z[,2]
设置第1列中的行是否为true,将新条目设置为第二列的2倍,否则只需将其设置为该索引处第二列的值
让我们创建z:
set.seed(4)
z <- data.frame(first=c(T, F, F, T, F), second=sample(-2:2),
third=letters[5:1], stringsAsFactors=FALSE)
z
这是我的for循环:
for(i in 1:nrow(z)){
if(z$first == TRUE){
z$newVar2 <- 2*z$second
}
else{
z$newVar2 <- z$second
}
}
这里没有for循环:
z$newVar<-ifelse(z$first==TRUE, 2*z$second, z$second)
申请时有办法做到这一点吗?有没有更有效的方法来完成这项任务?
答案 0 :(得分:2)
不是你提出的问题,但是如果使用矩阵数据结构,你也可以探索data.table
方法:
#Make data.table
setDT(z)
setkey(z)
#Write function to do all the stuff
myfun <- function(first, second){ifelse(first, 2*second, second)}
#Do stuff
z[, newvar2:=myfun(first, second)]
#Printing z
first second third newvar2
1: FALSE -2 d -2
2: FALSE -1 a -1
3: FALSE 1 c 1
4: TRUE 0 e 0
5: TRUE 2 b 4
答案 1 :(得分:2)
我们可以通过利用let descriptor = UIFontDescriptor(name: "OpenSans-Semibold", size: 10.0)
label.font = UIFont(descriptor: descriptor, size: 10.0)
if let font = UIFont(name: "OpenSans-Semibold", size: 10) {
label.font = font
}
而无需定义函数
data.table