#r
Вопрос:
У меня есть набор данных, в котором данные для каждого идентификатора собираются несколько раз (максимум 4 раза). Это выглядит примерно так, но я работаю с более чем 200 переменными:
id<-c(1,1,1,1,2,2,2,3,3,3,4,4,4,4)
age_group<-c(17-24 years,NA,NA,NA,25-55,NA,NA,17-24 years,NA,NA,17-24 years,NA,NA,NA)
gender<-c(male,NA,NA,NA,male,NA,NA,female,NA,NA,female,NA,NA,NA)
marital_status<-c(partnered,NA,NA,NA,single,NA,NA,single,NA,NA,partnered,NA,NA,NA)
education<-c(high school,NA,NA,NA,university,NA,NA,university,NA,NA,university,NA,NA,NA)
collection_point<-c(0,1,2,3,0,1,3,0,1,2,0,1,2,3)
df<-data.frame(id,age_group,gender,marital_status,education,collection_point)
collection_point
Переменная представляет, когда были собраны данные, поэтому 0 является базовым, 1-немедленным, 2-3-месячным наблюдением, а 3-6-месячным наблюдением. Я использовал subset()
функцию для удаления исходных данных для создания таблицы социодемографии, используя CreateTableOne()
функцию из пакета tableone. Таблица выглядит примерно так:
Overall
n 400
age_group (%)
17-24 years 300 ( 75.0)
25-55 years 100 ( 25.9)
gender (%)
Male 200 ( 50.0)
Female 200 ( 50.0)
marital_status (%)
Partnered 200 ( 50.0)
Single 200 ( 50.0)
education (%)
high school 100 ( 25.0)
University 300 ( 75.0)
Но я хотел бы сравнить эти характеристики в соответствии с collection_point
переменной, чтобы мой желаемый результат выглядел примерно так:
collection_point 0 1 2 3
n 400 300 200 200
age_group (%)
17-24 years 300 ( 75.0) 200 ( 66.7) 100 ( 50.0) 100 ( 50.0)
25-55 years 100 ( 25.9) 100 ( 33.3) 100 ( 50.0) 100 ( 50.0)
gender (%)
Male 200 ( 50.0) 150 ( 50.0) 100 ( 50.0) 100 ( 50.0)
Female 200 ( 50.0) 150 ( 50.0) 100 ( 50.0) 100 ( 50.0)
marital_status (%)
Partnered 200 ( 50.0) 150 ( 50.0) 100 ( 50.0) 100 ( 50.0)
Single 200 ( 50.0) 150 ( 50.0) 100 ( 50.0) 100 ( 50.0)
education (%)
high school 100 ( 25.0) 100 ( 33.3) 100 ( 50.0) 100 ( 50.0)
University 300 ( 75.0) 200 ( 66.7) 100 ( 50.0) 100 ( 50.0)
Любая помощь будет очень признательна! Я все еще новичок в R и этой платформе и пытаюсь привыкнуть к ней. Заранее приношу извинения, потому что я знаю, как это сложно выглядит 🙁
РЕДАКТИРОВАТЬ: Это сработало, спасибо! Просто нужно было добавить strata()
функцию, а затем использовать CreateTableOne()
ее снова. Я создал переменные listVar1 и catVar2.
listVar1<-c("age_group", "gender", "marital_status", "education")
catVar2<-c("collection_point", "age_group", "gender", "marital_status", "education").
Комментарии:
1. Было бы полезно, если бы вы могли предоставить строку кода, с помощью которой вы используете TableOneCreate(). Вам нужно будет использовать starta = collection_point.
2. @jamoreiras, Это сработало! Я использовал: Table_2 Спасибо!!
3. Превосходно! Не могли бы вы, пожалуйста, добавить в сообщение содержимое listVar1 и catVar2?
4. @jamoreiras Да! Однако мне будет очень трудно экспортировать таблицу, если я ее стратифицирую. Я использовал функцию write.table () для сохранения в формате .txt, но я продолжаю получать сообщение об ошибке, даже если оно нормально работало для первой таблицы!
Ответ №1:
Это может быть достигнуто с помощью слоев аргументов.
>Table_2 <- CreateTableOne(vars = listVar1, data = df,
factorVars = catVar2,
strata = c("collection_point"))
>print(Table_2)
Stratified by collection_point
level 0 1 2 3 p test
n 4 4 3 3
age_group (%) 17-24 years 3 (75.0) 0 (NaN) 0 (NaN) 0 (NaN) NaN
25-55 1 (25.0) 0 (NaN) 0 (NaN) 0 (NaN)
education (%) high school 1 (25.0) 0 (NaN) 0 (NaN) 0 (NaN) NaN
university 3 (75.0) 0 (NaN) 0 (NaN) 0 (NaN)
gender (%) female 2 (50.0) 0 (NaN) 0 (NaN) 0 (NaN) NaN
male 2 (50.0) 0 (NaN) 0 (NaN) 0 (NaN)
marital_status (%) partnered 2 (50.0) 0 (NaN) 0 (NaN) 0 (NaN) NaN
single 2 (50.0) 0 (NaN) 0 (NaN) 0 (NaN)