প্রথমত , আপনি যদি একই ডেটা ফ্রেমের সাথে কাজ করে থাকেন তবে কলামের নামগুলি পুনরায় অ্যাক্সেস করার পরিবর্তে আপনি ডাইরেক্ট ইনডেক্সিং (বুলিয়ান ভেক্টর সহ) ব্যবহার করতে পারেন; এটি ইস্তার নির্দেশিত হিসাবে নিরাপদ হবে এবং আরও দ্রুত লিখতে এবং কার্যকর করতে হবে। সুতরাং আপনার কেবল যা প্রয়োজন হবে তা হ'ল:
var.out.bool <- !names(data) %in% c("iden", "name", "x_serv", "m_serv")
এবং তারপরে, কেবল ডেটা পুনরায় অর্পণ করুন:
data <- data[,var.out.bool] # or...
data <- data[,var.out.bool, drop = FALSE] # You will need this option to avoid the conversion to an atomic vector if there is only one column left
দ্বিতীয়ত , দ্রুত লেখার জন্য, আপনি যে কলামগুলি সরাতে চান সেগুলিতে আপনি সরাসরি NULL নির্ধারণ করতে পারেন:
data[c("iden", "name", "x_serv", "m_serv")] <- list(NULL) # You need list() to respect the target structure.
শেষ অবধি, আপনি সাবসেট () ব্যবহার করতে পারেন, তবে এটি কোডে সত্যই ব্যবহার করা যাবে না (এমনকি সহায়তা ফাইল এটি সম্পর্কে সতর্ক করে দেয়)। বিশেষত, আমার কাছে একটি সমস্যা হ'ল আপনি যদি সাসবসেটের ড্রপ বৈশিষ্ট্যটি সরাসরি ব্যবহার করতে চান () আপনার কলামের নামগুলির সাথে মিল রেখে প্রকাশের উদ্ধৃতি ছাড়াই লিখতে হবে:
subset( data, select = -c("iden", "name", "x_serv", "m_serv") ) # WILL NOT WORK
subset( data, select = -c(iden, name, x_serv, m_serv) ) # WILL
বোনাস হিসাবে , এখানে বিভিন্ন বিকল্পের একটি ছোট মাপদণ্ড রয়েছে, যা স্পষ্টভাবে দেখায় যে সাবসেটটি ধীর এবং প্রথমটি, পুনরায় নিয়োগ পদ্ধতিটি দ্রুত:
re_assign(dtest, drop_vec) 46.719 52.5655 54.6460 59.0400 1347.331
null_assign(dtest, drop_vec) 74.593 83.0585 86.2025 94.0035 1476.150
subset(dtest, select = !names(dtest) %in% drop_vec) 106.280 115.4810 120.3435 131.4665 65133.780
subset(dtest, select = names(dtest)[!names(dtest) %in% drop_vec]) 108.611 119.4830 124.0865 135.4270 1599.577
subset(dtest, select = -c(x, y)) 102.026 111.2680 115.7035 126.2320 1484.174
কোড নীচে রয়েছে:
dtest <- data.frame(x=1:5, y=2:6, z = 3:7)
drop_vec <- c("x", "y")
null_assign <- function(df, names) {
df[names] <- list(NULL)
df
}
re_assign <- function(df, drop) {
df <- df [, ! names(df) %in% drop, drop = FALSE]
df
}
res <- microbenchmark(
re_assign(dtest,drop_vec),
null_assign(dtest,drop_vec),
subset(dtest, select = ! names(dtest) %in% drop_vec),
subset(dtest, select = names(dtest)[! names(dtest) %in% drop_vec]),
subset(dtest, select = -c(x, y) ),
times=5000)
plt <- ggplot2::qplot(y=time, data=res[res$time < 1000000,], colour=expr)
plt <- plt + ggplot2::scale_y_log10() +
ggplot2::labs(colour = "expression") +
ggplot2::scale_color_discrete(labels = c("re_assign", "null_assign", "subset_bool", "subset_names", "subset_drop")) +
ggplot2::theme_bw(base_size=16)
print(plt)
subset(data, select=c(...))
আমার মামলাগুলি বাদ দেওয়ার ক্ষেত্রে সহায়তা করে।paste("data$",var.out[i],sep="")
লুপের অভ্যন্তরে আগ্রহের কলামগুলি অ্যাক্সেস করার অংশটি ছিল মূলত । আমি কীভাবে কোনও কলামের নামটি আটকানো বা রচনা করতে পারি? আপনার মনোযোগ এবং আপনার সহায়তার জন্য প্রত্যেককে ধন্যবাদ